字符编码
字符编码
ASCII码
计算机内所有信息会转化成二进制(bit
),有0
和1
两种状态。
ASCII码 是美国定制的字符编码规范,有256个符号,从0000000
到11111111
。
但第一位默认为0
,共128个字符。所有这些编码方式中,0--127表示的符号是一样的,不一样的只是128--255的这一段。
ascii码中,A的二进制编码为01000001,如果用十进制表示是65,用十六进制表示就是41H。
Unicode
Unicode
码包括世界上所有的符号,每个符号都有独立的编码。
每个字符编码都不一样,,U+0639
表示阿拉伯字母Ain
,U+0041
表示英语的大写字母A
,U+4E25
表示汉字"严
"。
UTF-8 UTF-16 UTF-32
三个编码方式所需的字节长度:
UTF-8
UTF-16
UTF-32
1~4个字节
2个或4个字节
4个字节
UTF-8编码规则:
对于单字节的符号,字节的第一位设为0,后面7位为这个符号的
unicode
码。因此对于英语字母,UTF-8
编码和ASCII
码是相同的。对于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