Go语言采用的字符编码方案从属于Unicode编码规范。更确切地说,Go语言的代码正是由Unicode字符组成的。Go语言的所有源代码,都必须按照Unicode编码规范中的UTF-8编码格式进行编码。
Go编码
Go语言采用的字符编码方案从属于Unicode编码规范。更确切地说,Go语言的代码正是由Unicode字符组成的。Go语言的所有源代码,都必须按照Unicode编码规范中的UTF-8编码格式进行编码。
ASCII编码
American Standard Code for Information Interchange
美国信息交换标准代码(ASCII)
它是由美国国家标准学会(ANSI)制定的单字节字符编码方案,可用于基于文本的数据交换。
ASCII编码方案使用单个字节(byte)的二进制数来编码一个字符,并适用于所有的拉丁文字母。
Unicode编码
Unicode编码规范以ASCII编码集为出发点,并突破了ASCII只能对拉丁文字母进行编码的限制。
Unicode是一个更加通用的、针对书面字符和文本的字符编码标准。
它为世界上现存的所有自然语言中的每一个字符,都设定了一个唯一的二进制编码。
Unicode编码规范提供了三种不同的编码格式,即: UTF-8、UTF-16和UTF-32。UTF是Unicone转换格式,它代表的是字符与字节序列之间的转换方式。“-”右边的整数的含义是,以多少个比特位作为一个编码单元。以UTF-8为例,它会以8个比特,也就是一个字节,作为一个编码单元。
UTF-8是一种可变宽的编码方案。换句话说,它会用一个或多个字节的二进制数来表示某个字符,最多使用四个字节。比如,英文是1个字节,中文是3个字节。
QA
一个string类型的值在底层是怎样被表达的?
在底层,一个string类型的值是由一系列相对应的Unicode代码点的UTF-8编码值来表达的。
在Go语言中,一个string类型的值既可以被拆分为一个包含多个字符的序列(rune),也可以被拆分为一个包含多个字节的序列(byte)。
其中一个字符由1-4个字节来代表,也就是int32,所以可用rune来表示一个字符。