Golang 字符编码、UTF-8、Unicode之间的关系
🎈 作者:Linux猿
🎈 简介:CSDN博客专家🏆,华为云享专家🏆,Linux、C/C++、面试、刷题、算法尽管咨询我,关注我,有问题私聊!
🎈 欢迎小伙伴们点赞👍、收藏⭐、留言💬
本篇文章主要针对 UTT-8 和 Unicode 进行说明,当然还有涉及其它的编码。
一、什么是字符编码?
在正式开始前,先说下什么是字符编码以及字符编码的历史。
字符编码:也称字集码,是把字符集中的字符编码为指定集合中某一对象(例如:比特模式、自然数序列、8位组或者电脉冲),以便文本在计算机中存储和通过通信网络的传递。
简单理解就是以特定模式表示特定字符的表示形式,例如:ASCII码,使用7比特的二进制来表示128个字符,ASCII 码表,实际上就是 map 中 key/value的形式。
二、字符编码的发展
2.1 ASCII 编码
ASCII 码全程是美国信息交换标准编码(American Standard Code for Information Interchange),最初是作为美国国家标准制定,供不同计算机在相互通信时用作共同遵守的西文字符编码标准,后来它被国际标准化组织(International Organization for Standardization, ISO)定为国际标准,称为ISO 646标准。
ASCII 码通常使用一个字节来存储一个字符,规定字节的第一位为0,后面的7位用于表示字符。
2.2 Unicode 编码
虽然ASCII可以表示西文字符,但世界上还有许多的字符(当然不同的国家会自己的字符编码,但是仅仅表示自己国家的编码)。Unicode便是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。Unicode 只是一个符号集,规定了每个符号的二进制编码,但众多的字符数量就会导致,有的字符使用一个字节就可以表示,而有的需要几个字节,至于使用多少字节来存储是Unicode没有规定的。
Unicode 相当于一个行业标准,至于每个企业如何生产并没有规定,所以就出现了UTF-8,UTF-16,UTF-32不同的存储形式。
2.3 UTF-8 编码
UTF-8(8位元,Universal Character Set/Unicode Transformation Format)是针对Unicode的一种可变长度字符编码。它可以用来表示Unicode标准中的任何字符,而且其编码中的第一个字节仍与ASCII相容,使得原来处理ASCII字符的软件无须或只进行少部份修改后,便可继续使用。
UTF-8使用1~4字节为每个字符编码,相比于统一使用4个字节编码大大节省了空间,至于 UTF-8 的编码方式这里就再介绍,有需要的自行学习。
三、Golang 字符编码
Golang 内建支持 UTF-8 编码,支持转化到其它编码,例如:GBK编码,可以使用 golang.org/x/text 包进行转换。
Unicode code points: 可以简单理解为Unicode 用来表示每一个字符的 key,例如:汉字的“字”的十进制使用23383表示,这就是一个编码点。
🎈 欢迎小伙伴们点赞👍、收藏⭐、留言💬
- 点赞
- 收藏
- 关注作者
评论(0)