前言
常见的编码有ASCII,GBK和UTF-8等。在计算机内部,不管是什么,都是以0和1表示,八进制的计算机一个字节能表示的数量是(0000000-11111111 )256个字符。
ASCII编码:Amercan standrad code of information interchange 美国标准信息交换编码,ASCII一共定义了128个字符,规定字段的第一位都为0,后面的七位表示编码,ASCII只能表示英文,对于其他语言,无法表示。
GBK编码:Chinese internal code Specification 汉字内码扩展规范,兼容ASCII编码,双字节表示,能表示二万左右的汉字,其中汉字需要两个字节,英文只需要一个字节。
UTF-8编码:Universal charater set/unicode transform format 统一字符集合/编码交换格式,兼容ASCII编码,用一到四个字节表示。
UTF8编码规则
UTF-8使用1~4字节为每个字符编码:
一个US-ASCIl字符只需1字节编码(Unicode范围由U+0000~U+007F)。
带有变音符号的拉丁文、希腊文、西里尔字母、亚美尼亚语、希伯来文、阿拉伯文、叙利亚文等字母则需要2字节编码(Unicode范围由U+0080~U+07FF)。
其他语言的字符(包括中日韩文字、东南亚文字、中东文字等)包含了大部分常用字,使用3字节编码。
其他极少使用的语言字符使用4字节编码。
实例:
1字节0xxxxxxx -长度7
2字节110xxxxx 10xxxxxx -长度11
3字节1110xxxx 10xxxxxx 10xxxxxx -长度16
4字节11110xxx 10xxxxxx 10xxxxxx 10xxxxxx -长度21
由上面的公式,我们知晓多字节的第一个字节的前几位的1表示的正是字节长度。
UTF8编码实例
实例一:a (兼容ascii编码)
0110 0001
实例二:严
已知“严”的unicode是4E25(0100 1110 0010 0101)
这里我们需要用三个字节表示,为啥?因为4E25的长度是16位
转码公式
严:0100 1110 0010 0101的1-4位
1110 +1001 = 11100100
严:0100 1110 0010 0101的5-10位
10 + 111000= 10111000
严:0100 1110 0010 0101的11-16位
10 + 10 0101= 10100101
最终为:
1110 0100 1011 1000 1010 0101
E4B8A5
结尾
这是基础,要知其所以然