字符集编码—ASCII/ISO-8859-1/GBK/unicode/UTF-8
为什么要编码?
答:要表示的符号太多,没有统一的标准,计算机无法识别没有标准的字符
定长编码便于计算机处理,GBK不是定长编码,unicode属于定长编码
ASCII—美国信息交换标准代码
用一个字节的低 7 位表示,最早出现的字符集,美国标准,2的七次方的字符,共128种
问题:无法包含其他国家的字符
ISO-8859-1
一个字节(8bit 1byte),2的八次方,共256种,相比于ASCII多了一倍字符集,包括拉丁字和西欧语
问题:依然无法包含所有其他国家的字符,中文
GBK
两个字节表示一个汉字,中国汉字专属编码格式 例:A5 B6
GB2312/GBK/GB18030
- gb2312只能表示简体字
- gbk编码能够用来同时表示繁体字和简体字,兼容gb2312
- gb18030包含所有的中文文字
问题:无法让全世界编码规范统一,每个国家的字符集都不一样
unicode
为了解决全世界编码规范不同的问题,出现了unicode编码规范,它实现的编码方式可表示全世界所有的字符集,定长双字节,是一种根本标准
,具体使用是使用它的实现
Unicode 编码字符集旨在收集全球所有的字符,为每个字符分配唯一的字符编号即代码点(Code Point),从 U+0000 到 U+FFFF被划分为17个平面,现在包括1114111个编码点
Code Point: 码点,简单理解就是字符的数字表示。
Unicode 当然是一本很厚的字典,记录着世界上所有字符对应的一个数字。具体是怎样的对应关系,又或者说是如何进行划分的,就不是我们考虑的问题了,我们只用知道 Unicode 给所有的字符指定了一个数字用来表示该字符。
\u597d
->好
问题:原来一个字节可以表示的字符现在需要两个字节了
UTF-8
unicode translation format-8
,属于unicode的一种实现,使用unicode标准
为了解决unicode原来一个字节可以表示的字符现在需要两个字节的问题,出现了相对应的utf-8,utf-16,utf-32
UTF-8是一种可变长编码,可以使用1-4个字节表示一个字符,完全兼容ASCII
- 对于单个字节的字符,第一位设为 0,后面的 7 位对应这个字符的 Unicode 码点。因此,对于英文中的 0 - 127 号字符,与 ASCII 码完全相同。这意味着 ASCII 码那个年代的文档用 UTF-8 编码打开完全没有问题。
- 对于需要使用 N 个字节来表示的字符(N > 1),第一个字节的前 N 位都设为 1,第 N + 1 位设为0,剩余的 N - 1 个字节的前两位都设位 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 |
由此可以根据编码表区别这个字符是1个字节还是n个字节
参考博客:
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。