【原创】关于字符编码ASCII,GBK,Big5,Unicode

CleanLi(黎涛) 发表于2020-03-22    类别: 技术(65)    标签: 原创(65) 文化(26)

找了一些关于字符编码方面的资料,整理如下:

最早人们为了在计算机上显示文字,开始是用一个字节,0-0x20为控制码,0x20之后的表示空格、标点符号、数字、大小写字,一直到0x7f,这个方案叫做ANSI的“ASCII”编码(American Standard Code for Information Interchange,美国信息互换标准代码)。后来用0x7f之后的字节来表示一些新的字母、符号,和画表格时需要用下到的横线、竖线、交叉等形状,一直把序号编到了最后的0xff,从0x7f到0xff这一页的字符集被称“扩展字符集”。

GB2312是中文编码,1981年5月1日实施,通行于大陆,新加坡等地也使用此编码。它是一个简化字的编码规范,取消了“扩展字符集”,小于0x7f的字符的意义与原来ASCII相同,两个大于0x7f的字符表示一个汉字,前面的一个字节(高字节)从0xA1用到0xF7,后面一个字节(低字节)从0xA1到0xFE,这样有7445个简体汉字。这些编码包含数学符号、罗马希腊的字母、日文的假名,甚至包含 ASCII 里本来就有的数字、标点、字母,都重新编了两个字节的编码,这就是常说的”全角”字符,而原来在0x7f以下的就叫”半角”字符。 GB2312是对 ASCII 的中文扩展。

GB2312支持的汉字太少。1995年的汉字扩展规范GBK1.0收录了21886个符号,它分为汉字区和图形符号区。汉字区包括21003个字符,其中包含中日韩汉字及BIG5编码中的所有汉字。2000年的GB18030是取代GBK1.0的正式国家标准。该标准收录了27484个汉字,其中包括藏文、蒙文、维吾尔文等主要的少数民族文字。从ASCII、GB2312、GBK到GB18030,是向前兼容。GB2312、GBK 到GB18030都属于双字节字符集 (DBCS)。

GB2312的原文是区位码,从区位码到汉字编码,需要在高字节和低字节上分别加上A0。在DBCS中,GB编码的存储格式始终是big endian,即高位在前。GB2312的两个字节的最高位都是1,但符合这个条件的码位只有128x128=16384个。所以GBK和GB18030的低字节最高位都可能不是1。在读取DBCS字符流时,只要遇到高位为1的字节,就将下两个字节作为一个双字节编码。

Big5又称大五码,主要为香港与台湾使用,是传统汉字正体字编码。每个汉字由两个字节构成,第一个字节的范围从0X81-0XFE,第二个字节的范围不连续,分别为0X40-0X7E,0XA1-0XFE。

由于各国都有自己的文字编码标准,为了避免互不兼容,国际标准化组织(ISO)设计了可以容纳全世界所有语言文字的编码方案,“Universal Multiple-Octet Coded Character Set”,简称 UCS(Unicode Character Set), 俗称 “unicode”。UCS只规定了如何编码,而UTF(UCS Transfer Format)则是传输和保存的标准。比如UTF-8是每次8个位传输数据,而UTF-16就是每次16个位。UTF-8是在互联网上使用最广的,可以显示全世界上所有字符的一种unicode的实现方式。它使用1~4个字节表示一个符号。ASCII码用一个字节表示,中文字符占3个字节,但unicode一个中文字符占2个字节,所以UCS的编码与传输方式是不一样的。

目前Windows的内核已经采用Unicode编码。Windows使用代码页(code page)来适应各个国家和地区。GBK对应的code page是CP936。微软也为GB18030定义了code page:CP54936。但是由于GB18030有一部分4字节编码,而Windows的代码页只支持单字节和双字节编码,所以这个code page是无法真正使用的。

相关文章

   2024-01-06 【转载】八卦的万物类象
   2023-12-29 【转载】夫妻之间最好的关系:“三个字”
   2023-12-28 【收藏】易经
   2023-09-23 【原创】刀郎的歌
   2023-09-17 【收藏】九型人格
   2020-07-05 【转载】《太上感应篇》原文及白话文
   2020-01-25 【记录】庚子新年春联
   2019-06-23 【原创】IN GOD WE TRUST
   2019-02-12 【记录】己亥新年春联
   2018-07-29 【转载】二十四节气
   2018-03-25 【转载】吕蒙正劝世文
   2018-03-10 【转载】中华传统礼仪用语