unicode编码原理

unicode编码原理

参考博客

Unicode 编码共有三种具体实现,分别为utf-8,utf-16,utf-32,其中utf-8占用一到四个字节,utf-16占用二或四个字节,utf-32占用四个字节。Unicode 码在全球范围的信息交换领域均有广泛的应用。

Go语言中的Unicode与utf-8

链接:https://www.jianshu.com/p/6d5d9179fd8c

Go一个string类型的值在底层是怎样被表达的? **一般回答:**在底层,一个string类型的值是由一系列相对应的Unicode代码点的UTF-8编码值来表达 问题解析  在Go语言中,一个string类型的值既可以被拆分为一个包含多个字符的序列,也可以被拆分成一个包含多个字节的序列。前者可以由一个rune为元素的切片来表示,而后者可以由一byte为元素类型的切片代表。 rune是Go语言中特有的一个基本数据类型,它的一个值就代表一个字符,即:一个Unicode字符。比如,‘G’, ‘o’, ‘爱’,‘好’,‘者’代表的就是一个Unicode字符。 我们已经知道,UTF-8UTF-8编码方案会把一个Unicode字符编码为要一个长度在[1, 4]范围内的字节序列。所以,一个rune类型的值也可以由一个或多个字节来表示。

1
type rune = int32

根据rune类型的声明可知,它实际上就是int32类型的一个别名类型。也就是说,一个rune类型的值会由四个字节宽度的空间来存储。它的存储空间总是能存下一个UTF-8编码值。 一个rune类型的值在底层其实就是一个UTF-8编码值。前者是便于人类理解的外部展现,后者是便于计算机理解的内在表达。

utf8 Bom

BOM (Byte order mark) 带标记

1
UTF-8以字节为编码单元因此不需要 BOM 来表明字节顺序,但可以用 BOM 来表明编码方式。字符 "Zero Width No-Break Space" 的 UTF-8 编码是 EF BB BF。所以如果接收者收到以 EF BB BF 开头的字节流,就知道这是 UTF-8编码了。

https://www.imooc.com/article/26166

c语言宽字符

学习视频

image-20220405142118877