编码Q&A

Q:什么是编码?

A:由于计算机中所有数据都是以二进制存在,那么为了存储数字,字母,各种符号和文字,计算机必须用一套映射系统来对应。比如我在某台计算机上规定,用00010001这个二进制数表示字母a,用10010010表示中文字“好”。这种规定就是编码。

 

Q: 什么是ASCII?

A:显然,计算机不是一个人规定好自己怎么编码就行的。计算机需要在其使用者们之间通信。因此,最好大家采用同一套通用的编码系统。ASCII就是其中出现最早的(以标准形式出现于1967年,最后一次更新是在1986年),其全称是American Standard Code for Information Interchange(美国信息交换标准代码),是一种基于拉丁字母的的7位电脑编码系统。

 

Q:7位的含义是?

A:从 0000 0000 到 0111 1111之间一共有128个状态,用来表示: 26个小写字母+26个大写字母+10个数字+32个符号+33个控制代码+1个空格=128。

用16位进制表示,就是占用了 0x00到0x7f 之间这么多个字符状态。 (不同语言用不同方式表示16进制数,C语言在数前加0x0X表示16进制数,如0x7f就是二进制的0111 1111)

 

Q:  基于拉丁字母?

A: 拉丁字母就是我们通常所说的26个大写英文字母+26个小写英文字母。

由于ACII出现得很早,当时只限于英语国家使用,故而认为128个字符已经足够使用。

 

Q:有没有别的称呼?

A:其国际标准名称是ISO/IEC 646。

 

Q:ASCII有什么缺点?

A:能够编码的字符太少,只能适用于美国现代英语(而且外来词naïve、café、élite的重音只能去掉)。虽然其后续这EASCII解决了西欧语言中类似这样的问题,但对于其他语言没有办法。

 

Q:ASCII的影响?

A:ACSII是一种ISO标准,这种标准使得含有ASCII字符的文本文件可以在几乎所有的操作系统中实现互换,而其它格式的文件是很难做到这一点的。因此ACSII编码是讨论其他编码的基础。

 

Q: 我经常在notepad中看到ANSI,这又是什么编码标准?

A:ANSI本来是指美国国家标准学会(American National Standards Institute)。当这个词指编码时,其真正更准确的名称是ANSI code pages它实际上是上世纪80到90年代Windows操作系统上一系列编码的集合。对于不同国家,ANSI指适用于本国文字的字符编码标准。如中国的ANSI就是 GB2312(或其超集GBK),台湾的ANSI则是BIG5,日本的 ANSI 是JIS。它被称作ANSI其实一种名称的误用,因为这个集合中的编码压根就没通过ANSI和ISO的审核。不管怎样,这个词在Windows环境下还是坚持到如今……(参考:ANSI_code_page)

 

Q:太复杂了。有没有一种通用的办法,能够一揽子解决各种平台,各种国家,各种网络和机器环境下的编码问题呢?

A:终于轮到我们的大牛出场了。他就是大家耳熟能详的Unicode,又叫统一码,万国码。他使用ISO推出的通用字符集为基础,对世界上大部分文字进行整理并编码,力图统一所有编码。迄今已收纳超过11万个字符,并且仍在发展。Unicode现在被广为推崇(甚至微软也推荐),在现代操作系统、JAVA和.NET、XML中已经被默认实现。其最新版本是Unicode 6.3

 

Q:听说UTF-8UTF-16和Unicode有关系,是这样的吗?

A:是的。实际上Unicode是一整套解决方案,包括编码方式和实现方式。其实现方式就是UTF(Unicode Transformation Format)。后面的-8表示该编码采用8bit一组作为码元,而-16则表示采用16bit一组。UTF-8是万维网推荐的传输标准。

 

其他名词:

GB2312:兼容中国对ascii进行的字符编码扩展。全称是“信息交换用汉字编码字符集——基本集”。1980年推出。包含汉字6763个和非汉字图形字符682个。“联通”在此标准中会有错误。

GBK:与GB2312兼容,在此基础上增加到2 w多字。

BIG5:香港、台湾繁体中文区的字符集编码标准。

 

posted @ 2013-12-04 17:05  瓜王  阅读(536)  评论(0编辑  收藏  举报