如何让人类字符使计算机可识别?
众所周知,最直接的和计算机进行交互只能通过机器语言,即二进制编码。如今我们所使用的编程语言,都是在一定程度上由编译器转换为计算机明白的数字,我们的程序才得以运行。那么计算机是如何将人类文明的字符转换为数字的呢?接下来我将向宁介绍三种方法,分别是Unicode,UTF-8和ASCII
-
Ascii
Ascii,又称美国信息交换标准代码,是目前最通用的信息交换标准,也是本篇介绍编码方法种最早的一个。Ascii采用一个字节(即8个位)来表示一个字符,2⁸可以表示0~256个字符。其中,在标准的Ascii里,最高位为校验位,这一位采用奇偶校验法的方式来判定数据在传输过程种有没有出现错误。而在扩展ASCII中,这一位用来判断是否为128~255位的字符
ASCII主要可以分为三部分,第一部分是00~31,这一部分主要为系统的通讯和控制信号,其中有的不可以直观的显示在屏幕上,但是可以通过观察程序运行的结果来体现它的存在。例如,退格键\b,蜂鸣声\a。
第二部分是33~127,主要包含英文,阿拉伯数字和一些常用的字符。
第三部分由IBM(国际商用机器公司)制定,主要包含框线、音标和其它欧洲非英语系的字母。
然而很明显,256个字符无法将全人类的所有文化字符都包含进来,尤其是像中文、韩文和日文这些较为复杂的文字,于是新型的编码方式应运而生。 -
Unicode
既然一个字节不足以表示完所有的字符,那两个字节是否可以呢?Unicode就是一种采用两个字节的编码方式。Unicode可以兼容原有的英文编码,只需要将高位全部转为0即可.
但是,UNICODE并没有提供对诸如Braille(盲文),Cherokee, Ethiopic(埃塞俄比亚语), Khmer(高棉语), Mongolian(蒙古语), Hmong(苗语), Tai Lu, Tai Mau文字的支持。同时它也不支持如Ahom(阿霍姆语), Akkadian(阿卡德语), Aramaic(阿拉米语), Babylonian Cuneiform(古巴比伦楔形文字), Balti(巴尔蒂语), Brahmi(婆罗米文), Etruscan(伊特拉斯坎语), Hittite(赫梯语/西台语), Javanese(爪哇语),Numidian(努米底亚语), Old Persian Cuneiform(古波斯楔形文字),Syrian(叙利亚语)之类的古老文字。
况且能够用ascii表示的文字调用UNICODE的效果十分不理想,因为后者比前者多占了一倍的空间。
3.UTF-8
针对Unicode的一种可变长度字符编码。它可以用来表示Unicode标准中的任何字符,而且其编码中的第一个字节仍与ASCII相容,使得原来处理ASCII字符的软件无须或只进行少部份修改后,便可继续使用。
UCS字符U+0000到U+007F(ASCII)被编码为字节0×00到0x7F(ASCIⅡ兼容)。这意味着只包含7位ASCIl字符的文件在ASCIⅡ和UTF-8两种编码方式下是一样的。
UTF-8编码字符理论上可以最多到6个字节长,然而16位BMP字符最多只用到3字节长,Bigendian UCS-4字节串的排列顺序是预定的,字节0xFE和OxFF在UTF-8编码中从未用到。 [3]