Unicode 的前世今生

Unicode 的前世今生

引言

在计算机出现之前,人类通过语言和文字交流。当计算机诞生之后,需要将文字存储在计算机中,但计算机只能存储 0 和 1,如何将文字转换成 0 和 1 存储在计算机里呢?

Unicode 之前的字符集

Unicode 是 1991 年发布的,这之前使用的是什么编码呢?

ASCII

American Standard Code for Information Interchange
美国使用的编码(开始计算机只在美国用)。
8 bits 表示,可表示 256 种字符。但规定最高位为 0,所以只能表示 128 个字符。
编码规则如下,一个字符对应一个数字:十进制的 65 表示字符 A。

OEM character

当非美国国家开始使用计算机后,他们的语言中的文字有许多是 ASCII 里没有的。为了可以在计算机保存他们的文字,他们自定义了 ASCII 中 127 号之后的空位的含义。不同国家产生了不同的字符集,称为 OEM character。
显而易见的是,不同的 OEM 编码是不兼容的。当国家 A 的文件传到国家 B 进行解码时,会发生乱码。为了解决这种乱象,ANSI ( American National Standards Institute ) 分配独特的 code page 给每种 OEM character(可以理解给每种 OEM character 分配了一个 ID),以保证解码时不会发生乱码。

GB2312

等中国人们使用计算机时,发现有 6000 多个常用汉字需要保存,仅利用 8 bits 根本表示不完,而且还需要与 ASCII 兼容。但是这难不倒智慧的中国人民。
GB2312 规定:一个小于 127 的字符的意义与原来相同,但两个大于 127 的字符连在一起时,就表示一个汉字(一个汉字 === 两个英文字符的由来),这样就可以组合出大约 7000 个简体汉字了。
我们还将 ASCII 里本来就有的数字、标点、字母都统统重新编了两个 byte 长的编码,这就是常说的"全角"字符,而原来在 127 号以下的那些就叫"半角"字符了。

后来还是不够用,于是干脆不再要求低字节一定是127号之后的内码,只要第一个字节是大于127就固定表示这是一个汉字的开始。
编码方案被称为 GBK 标准,GBK 包括了 GB2312 的所有内容,同时又增加了近20000个新的汉字(包括繁体字)和符号。

小结

不同的国家使用不同的字符集进行编码。
存储的问题解决了,但不同国家的如何进行信息交换呢?对于软件开发者来说,适配不同的编码就是恶梦。
解决方案有二:

  1. 所有人都说同一种语言。
  2. 一种编码方式可以囊括所有语言(由 ISO 、Unicode 分别提出)。

UCS

Universal Multiple-Octet Coded Character Set
目的是创造一种包含所有语言的统一字符集。
1984 年ÿ

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值