编程通用知识 字符编码(ascii,unicode,utf-8)

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,所以就在计算机中存储就为0000FEFF0000738BFFFE00008B730000
0000FEFF0000FFFE分别代表的大小端,在读取文件时先读取此大小端的规定

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

发布了1794 篇原创文章 · 获赞 582 · 访问量 154万+

猜你喜欢

转载自blog.csdn.net/claroja/article/details/104290559