编码理解

在计算机内部,所有信息都表示成二进制01,若要显示出来让人看懂,需要进行编码转换。如汉字”严”以 Unicode编码保存到计算机中是4E25,即01001110 00100101,显示给用户看时,通过Unicode编码表查看4E25对应的是”严”,显示出来。
编码的发展过程:

(1)ASCII码

字节是计算机存储的基本单位,一字节等于八位(1byte = 8bit)。一个字节可以表示256种状态(00000000-11111111)。因此ASCII码被发明来表示128个字符(00000000-01111111),只占用后七位,第一位默认为0。其中包含所有英文字母及其他一些字符,如大写字母”A”表示为01000001(10进制为65)。

(2)ASCII码加强

有些国家不用英文,自己利用字节最高位创造了一些其他字符,多表示了ASCII码除外的128个字符。如法语é表示为10000010。

(3)ISO-8859-1

各个组织各搞各的没有标准很混乱,ISO 组织发明了ISO-8859-1涵盖了大多数西欧语言字符,总共能表示 256 个字符。

(4)GB2312

中国自己发明了GB2312来表示中文,双字节,编码范围是 A1-F7。

(5)GBK

GB2312表示的汉字太少,GBK 扩展了,编码范围是 8140-FEFE(去掉 XX7F)总共能表示23940个字符。

(6)Unicode

编码过多,每次打开文件都得判断是哪种编码,进行对应的编码转换,而且系统必须支持。为了统一编码,出现了Unicode。Unicode涵盖了所有字符集。如汉字”严”,Unicode编码为4E25。

(7)UCS

UCS(Unicode Character Set),Unicode的简称。目前有两种格式:UCS-2和UCS-4。UCS-2就是用两个字节编码,UCS-4就是用4个字节编码。

(8)UTF-8

Unicode只是一个概念,表示一个字符和二进制对应关系表,若直接存储进计算机会出现问题。如汉字”严”,Unicode编码为4E25,二进制为01001110 00100101,直接存储二进制,和ASCII码串”N%”(也是01001110 00100101)存储内容一样,无法区分。
UTF-8就是为了专门存储Unicode而产生,规则如下:
1. ASCII码保持不变,依然是0xxxxxxx
2. 对于其他 n 字节(n>1)的字符,第一个字节的前n位都为1,第n+1位为0,后面字节的前两位为10,其他没提及的二进制位,全部为这个字符的unicode码。

Unicode符号范围UTF-8编码方式
0000 0000-0000 007F0xxxxxxx
0000 0080-0000 07FF110xxxxx 10xxxxxx
0000 0800-0000 FFFF1110xxxx 10xxxxxx 10xxxxxx
0001 0000-0010 FFFF11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
(9)UTF-16

UTF-8以单字节(8bit)为基础单位,UTF-16以双字节(16bit)为基本单位。其中BMP(基本多语言平面,U+0000至U+FFFF)双字节,包含了最常用的字符,与Unicode编码一致;其他的是辅助平面,四字节。
多字节存储存在读取大小端问题,”大头方式”(Big endian),第二个字节在前就是”小头方式”(Little endian)。
Unicode规范中定义,每一个文件的最前面分别加入一个表示编码顺序的字符,如果一个文本文件的头两个字节是FE FF,就表示该文件采用大头方式;如果头两个字节是FF FE,就表示该文件采用小头方式。

(10)UTF-32

UTF-32以四字节(32bit)为基础单位,足够存储所有字符。

github 地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值