十、常见字符编码4:UNICODE
10.1、背景介绍
在统一码之前,各国创造了大量的节编码标准,有单字节的、双字节的(如 GB 2312、Shift JIS、Big5 、ISO8859等),各自又相互不兼容。在1987 年,苹果、Sun、微软等公司开始讨论囊括全世界所有字符的统一编码标准,组成了 Unicode 联盟,这个期间做了很多研讨工作,讨论核心要点如下。
1)目前世界上有多少个字符,需要几个字节存储?
工作组统计了当时全世界的报纸等刊物,结论是两个字节足以囊括全世界有实用意义的字符(当然这只统计了当前使用的字符,不包括古代语言或者废弃语言)。
2)采用固定长度编码还是变长编码?
一种采用变长编码形式,对于 ASCII 字符使用一个字节,其他字符使用两个字节,类似 GBK。另一种采用定长编码形式,不管是不是 ASCII 字符统一使用两个字节。
方案选择上主要从计算机处理过程中的时间和空间两个维度,也就是编解码的执行效率和存储大小两方面。
最后结论是采用双字节定长编码,因为定长带来的空间变大在整体传输、存储成本上其实影响并不大,而定长编码处理效率会明显高于变长编码,所以早期 Unicode 采用了定长编码形式。
3)中、日、韩中有很多相近的表意文字是否可以统一?
由于汉字表意文字字符量较大,如果可以统一那么能大幅减少收录汉字的数量。
所以最初收录汉字遵循两个基本原则:表意文字认同原则和字源分离原则。
所谓表意文字认同原则:即“只对字,不对形”编码,将同一字的不同字形(即异体字)合并。例如“房”字的第一笔,在中日韩的写法都不同,但它本身是同一个字,只给一个编码,而写法的不同交由字体进行区分。
字源分离原则:是指一个字源中同时收录了同一个字的不同字形,则给予两个字形分别编码。例如:之前GBK中就收录了“戶”、“户”、“戸”三个字,那么Unicode也需要保留三个字,如果直接合并会造成使用上的困扰。
例如下面这句话如果不做字源分离,会是什么情况呢?
原句 :户有三种写法,分别是“戶”、“户”、“戸”,
改写后:户有三种写法,分别是“户”、“户”、“户”
带你读《全景揭秘字符编码》之十:常见字符编码4:UNICODE(2) https://developer.aliyun.com/article/1240888?groupCode=tech_library