Golang 字符编码、UTF-8、Unicode之间的关系

  目录

一、什么是字符编码?

 二、字符编码的发展

2.1 ASCII 编码

2.2 Unicode 编码

2.3 UTF-8 编码

三、Golang 字符编码

四、参考链接


本篇文章主要针对 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表示,这就是一个编码点。

四、参考链接

[1] https://blog.golang.org/strings

[2] https://www.cnblogs.com/junneyang/p/6097976.html

[3] http://mengqi.info/html/2015/201507071345-using-golang-to-convert-text-between-gbk-and-utf-8.html

 

猜你喜欢

转载自blog.csdn.net/u011074149/article/details/109395953