ascii,unicode,utf-x都是文字和数字的映射, 因为计算机只能存储数字.
ascii
1.早起用8位二进制来编码英文(最前面以为是0,实际只用了7位),既产生了128个元素的ascii码表.
2.但是128个只能表示英文,所以其他国家就决定把字节中最前面一位拿来使用,原来的128个元素,就编程了256个字符,也即是说最高位为1的时候,各个国际自己给后面的位(1xxxxxxx)赋予他们国家的意义.
3.这样还是有两个问题,1)各个国家的标准不一样,比如130 在法语中代表了 é,但是在希伯来语中却代表了字母 Gimel,标准不通用; 2)中文汉字128个显然不够
unicome
1.为了解决ascii编码的不足,世界各国就制定了统一的编码标准,既unicode,编码范围是0x000000到0x10FFFF,共110万个字符,每个字符都有唯一的Unicode编号.
2.unicode本身只规定了每个字符的编号是多少,并没有规定在计算机里如何存储,如何存储是utf-x来决定了.也就是说unicode是一个规范,而utf-x是这个规范的实现
utf-x
utf-x表示了unicode如何在电脑中存储,以王为例,王的unicode编码是738B
utf-32
以四个字节表示,不足高位补0,所以王就在计算机中存储就为0000FEFF0000738B或FFFE00008B730000
0000FEFF和0000FFFE分别代表的大小端,在读取文件时先读取此大小端的规定
utf-16
1.使用变长字节表示:
1)0x0000~0xFFFF的字符,用两个字节表示
2)0x10000~10FFFF之间的字符,用四个字节表示
2.开头使用FEFF和FFFE来表示大小端
utf-8
1.变长字节表示
1)字节第一位是0的,和ascii编码相同,使用一个字节
2)对于第一位非0的,需要多个字节来表示.假设utf-8使用了n(2=<n<=4)个字节表示字符,第一个字节的前n位都为1,第n+1位都为0,后面的字节一律设为10,将unicode编码字节按顺序填入没有规定的位置即可
3)utf-8 没有大小端
| 编码范围 | 二进制 |
|---|---|
| 0x00~0x7f(0-127) | 0xxxxxxx |
| 0x80~0x7FF(128-2047) | 110xxxxx 10xxxxxx |
0x800~0xFFFF(2048-65535)1110xxxx 10xxxxxx 10xxxxxx
0x10000~0x10FFFF(65535以上)|1110xxx 10xxxxxx 10xxxxxx 10xxxxxx
王的各个编码
| 编码类别 | 结果 |
|---|---|
| Unicode编码 | 738B |
| UTF8编码 | E78E8B |
| UTF16BE编码 | FEFF738B |
| UTF16LE编码 | FFFE8B73 |
| UTF32BE编码 | 0000FEFF0000738B |
| UTF32LE编码 | FFFE00008B730000 |
参考:
https://blog.csdn.net/hongsong673150343/article/details/88584753
https://www.qqxiuzi.cn/bianma/Unicode-UTF.php
本文深入探讨了ASCII、Unicode及UTF-X编码体系的原理与应用,包括各自的编码范围、存储方式及特点。从ASCII的局限性出发,介绍了Unicode如何统一全球字符编码,并详细解析了UTF-8、UTF-16和UTF-32在计算机中的存储机制。

4万+

被折叠的 条评论
为什么被折叠?



