字符编码

字符编码

ASCII码

计算机内所有信息会转化成二进制(bit),有01两种状态。

ASCII码 是美国定制的字符编码规范,有256个符号,从000000011111111

但第一位默认为0,共128个字符。所有这些编码方式中,0--127表示的符号是一样的,不一样的只是128--255的这一段。

ascii码中,A的二进制编码为01000001,如果用十进制表示是65,用十六进制表示就是41H。

ASCII码表查询 维基百科

Unicode

Unicode码包括世界上所有的符号,每个符号都有独立的编码。

每个字符编码都不一样,,U+0639表示阿拉伯字母AinU+0041表示英语的大写字母AU+4E25表示汉字""。

UTF-8 UTF-16 UTF-32

三个编码方式所需的字节长度:

UTF-8

UTF-16

UTF-32

1~4个字节

2个或4个字节

4个字节

UTF-8编码规则:

  1. 对于单字节的符号,字节的第一位设为0,后面7位为这个符号的unicode码。因此对于英语字母,UTF-8编码和ASCII码是相同的。

  2. 对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的unicode码。

Unicode符号范围

UTF-8编码方式

(十六进制)

(二进制)

0000 0000 - 0000 007F

0xxxxxxx

0000 0080 - 0000 07FF

110xxxxx 10xxxxxx

0000 0800 - 0000 FFFF

1110xxxx 10xxxxxx 10xxxxxx

0001 0000 - 0010 FFFF

11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

字母x表示可用编码的位。

跟据上表,解读UTF-8编码非常简单。如果一个字节的第一位是0,则这个字节单独就是一个字符;如果第一位是1,则连续有多少个1,就表示当前字符占用多少个字节。

Unicode与UTF-8之间的转换

从上表可知,的Unicode码为4E25(100111000100101),从上表可知道位于第三行范围内,因此UTF-8编码格式为"1110xxxx 10xxxxxx 10xxxxxx",然后从最后一个二进制开始,依次填入格式中的x,多出补0,最后结果是E4B8A5

汉字编码查询

资料参考

Last updated