中文编码集的发展史(ASCII码、GBK、UTF 您所在的位置:网站首页 繁体汉子编码 中文编码集的发展史(ASCII码、GBK、UTF

中文编码集的发展史(ASCII码、GBK、UTF

#中文编码集的发展史(ASCII码、GBK、UTF| 来源: 网络整理| 查看: 265

前言

中文编程界的汉字编码问题,每一个小白的血泪史,每一个小白在处理中文文件时,都无数次想,如果这是一份纯英文的文件,可能现在早就下班在家洗澡了。

史前文明-ASCII码

每个程序员都知道,不论是你在手机上看到漂亮小姐姐,还是这篇博文中的文字,在计算机底层存储中都是又一串01编码组成的二进制文件。

image.png

虽然对于计算机来说高低电平来控制程序的执行逻辑是很方便的事情,但是人可读不懂复杂冗长的二进制文件,因此就需要制定一种编码规则实现二进制文件与人类文字的相互转换,ACSII码应运而生。

计算机最早是由美国人在使用,于是由他们制定了二进制编码中8bit为一个字节(0~255),划定了0-32的控制码、26个大小写英文字母以及若干个英文符号的二进制编码,将一个字节使用到了127号,因此在ASCII码中一个字节就是一个英文字母,很好计算。美国人将这种编码方式命名为 ANSI(American National Standards Institute,美国国家标准学会) 的ASCII码,全称American Startand Code for Information Interchange,美国信息互换标准码。

image.png

随后很多欧洲国家也开始使用计算机,进而占用了一个字节的剩余128~255的位置,称为 ISO 8859-1,International Organization for Standardization(国际标准组织)。

汉字编码的军阀混战-GB2312、GBK、BIG5、JIS GB2312,中国大陆编码规范

image.png

随后计算机逐渐在中国日本等国家流行开来,和之前面临同样的问题,中国也迫切需要一种编码方式将二进制按照某种规则翻译为汉字显示出来。但是和只有26个的英文字母不同的是,中文的每一个字都是一种新的写法,因此只能对每个汉字映射到一个二进制编码。而常用汉字就有6000多个,之前美国人定义的8bit=1字节完全不够用。于是人们想到了对于ASCII码进行扩展,用两个字节表示。并且将这种编码方式命令为GB2312(GB,Guóbiāo,中华人民共和国国家标准,简称国标,即国标2312)。

计算机在使用这种编码时,判断当前字节是否在0~127(ASCII码范围),如果在,则表示当前为单字节的英文字母;否则,会联合后面的一个字节共同判断当前的汉字表示(注意,在GB2312中两个字节都要大于127)。

整个过程用伪代码表示如下:

def decode(stream): byte the_byte = stream.next_byte() if 0 127: return decode_chinese(the_byte, next_byte) # decode chinese else: return error # decode error.

此外,GB2312中还包含了很多数学符号、罗马希腊的字母、日文的假名,而且还包含了ASCII中定义的一些标点符号,例如本文中的逗号,这些符号都定义了双字节的版本,这种符号被称为全角符号,与之对应的概念即ASCII码中的半角符号。

GBK,GB2312的扩展,简体字常用编码

细心的读者可以发现,在GB2312标准中,只有两个相邻的字节都是128~255的编码值,才会将其解析为汉字,这其实完全没有必要,会浪费很多数字。因为其实只要读到一个字节是ASCII字符集以外的二进制,也就表明了这是一个汉字,其后的下一个字节完全可以取0~255中的任何一个数字,因此 国标2312 后又对其进行了字符集的扩展kuòzhǎn,也就诞生了我们耳熟能详的国标扩,GBK,这种双字节表示一个汉字的方式称为DBCS(Double Byte Charecter Set 双字节字符集)。这时候的解析伪代码如下:

def decode(stream): byte the_byte = stream.next_byte() if 0


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有