手机版

字符编码笔记ASCII Unicode和UTF-8

时间:2021-10-08 来源:互联网 编辑:宝哥软件园 浏览:

1.ASCII码正如我们所知,计算机中的所有信息最终都表示为二进制字符串。每个二进制位有两个状态,0和1,因此八个二进制位可以组合256个状态,这称为一个字节。也就是说,一个字节可以代表256种不同的状态,每种状态对应一个符号,也就是256个符号,范围从000000到1111111。20世纪60年代,美国制定了一套字符编码,统一规定了英文字符与二进制数字的关系。这叫ASCII码,一直沿用到现在。ASCII码指定了总共128个字符的编码,例如,SPACE“SPACE”是32(二进制00100000),大写字母a是65(二进制0100001)。这128个符号(包括32个不能打印的控制符号)只占用一个字节的最后7位,前1位统一设置为0。2.非ASCII编码英语足以用128个符号编码,但不足以代表其他语言。比如法语中,如果字母上面有音标,就不能用ASCII码表示。因此,一些欧洲国家决定使用字节中空闲的最高位来编译新符号。例如,法语中的代码是130(二进制10000010)。这样,这些欧洲国家使用的编码系统最多可以代表256个符号。然而,新的问题出现了。不同的国家有不同的字母,所以即使它们都使用256个符号的编码方法,它们所代表的字母也是不同的。例如,130在法语编码中代表,但在希伯来语编码中代表字母Gimel (),在俄语编码中代表另一个符号。然而,在所有这些编码方法中,由0-127表示的符号是相同的,唯一的区别是128-255的段落。至于亚洲国家的文字,使用的符号比较多,大约有10万个汉字。一个字节只能代表256个符号,绝对不够,需要用多个字节来表示一个符号。比如简体中文常用的编码方式是GB2312,用两个字节表示一个汉字,所以理论上最多可以表示256x256=65536个符号。中文编码需要在一篇特别的文章中讨论,这篇文章没有涉及。这里只指出,虽然一个符号用多个字节表示,但GB类的汉字编码与Unicode和UTF-8无关。3.Unicode正如上一节提到的,世界上有很多编码方法,同一个二进制数可以解释为不同的符号。因此,如果你想打开一个文本文件,你必须知道它的编码模式,否则,当你用错误的编码模式解释它时,就会出现乱码字符。为什么电子邮件经常乱码?因为发送方和接收方使用不同的编码方法。可想而知,如果有代码,世界上所有的符号都会包含在其中。每个符号被赋予一个唯一的代码,那么乱码的问题就会消失。这就是Unicode,顾名思义,它是所有符号的编码。Unicode当然是一个很大的集合,目前的规模可以容纳100多万个符号。每个符号的编码是不同的。比如U 0639代表阿拉伯字母Ain,U 0041代表英文大写字母A,U 4E25代表汉字颜。具体符号对应表,可以查询unicode.org,或者特殊汉字对应表。4.Unicode的问题需要注意的是,Unicode只是一个符号集,它只指定了符号的二进制代码,而没有指定二进制代码应该如何存储。比如汉字颜的unicode是十六进制数4E25,换算成二进制数有15位(100111000100100101),这意味着这个符号的表示至少需要2个字节。对于其他较大的符号,可能需要3字节或4字节甚至更多。

这里有两个严重的问题。第一个是如何区分unicode和ascii。计算机怎么知道三个字节分别代表一个符号而不是三个符号?第二个问题是,我们已经知道英语字母只用一个字节来表示就足够了。如果unicode统一规定每个符号用三四个字节表示,那么每个英文字母前的两三个字节必须是0,这对于存储来说是极大的浪费,文本文件的大小也会大两三倍,这是不可接受的。结果如下:1)存储unicode的方式有很多,也就是说,有很多不同的二进制格式可以用来表示unicode。2)unicode直到互联网出现才得以长期普及。5.随着UTF 8互联网的普及,对统一编码方法的需求强烈。UTF-8是互联网上使用最广泛的unicode实现之一。其他实现包括UTF-16和UTF-32,这些基本上不在互联网上使用。同样,这里的关系是UTF-8是Unicode的实现之一。UTF-8最大的特点是它是一种可变长度的编码方法。它可以用1~4个字节来表示一个符号,字节长度根据不同的符号而变化。UTF-8的编码规则非常简单,只有两个规则:1)对于单字节符号,字节的第一位设置为0,接下来的7位是该符号的unicode代码。因此,UTF-8编码和ASCII编码对于英文字母是相同的。2)对于N字节符号(n1),第一个字节的前N位全部设置为1,前N个1位设置为0,后续字节的前两位全部设置为10。其余未提及的二进制位都是该符号的unicode代码。下表总结了编码规则,字母x表示可以编码的位。复制的代码如下: Unicode符号范围| UTF-8编码模式(十六进制)|(二进制)。

版权声明:字符编码笔记ASCII Unicode和UTF-8是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。