gopl-zh.github.com/ch3/ch3-05-2.md

1.9 KiB
Raw Blame History

3.5.2. Unicode

在很久以前世界还是比较简单的起码计算机世界就只有一个ASCII字符集美国信息交换标准代码。ASCII更准确地说是美国的ASCII使用7bit来表示128个字符包含英文字母的大小写、数字、各种标点符号和设置控制符。对于早期的计算机程序来说这些就足够了但是这也导致了世界上很多其他地区的用户无法直接使用自己的符号系统。随着互联网的发展混合多种语言的数据变得很常见译注比如本身的英文原文或中文翻译都包含了ASCII、中文、日文等多种语言字符。如何有效处理这些包含了各种语言的丰富多样的文本数据呢

答案就是使用Unicode http://unicode.org 它收集了这个世界上所有的符号系统包括重音符号和其它变音符号制表符和回车符还有很多神秘的符号每个符号都分配一个唯一的Unicode码点Unicode码点对应Go语言中的rune整数类型译注rune是int32等价类型

在第八版本的Unicode标准收集了超过120,000个字符涵盖超过100多种语言。这些在计算机程序和数据中是如何体现的呢通用的表示一个Unicode码点的数据类型是int32也就是Go语言中rune对应的类型它的同义词rune符文正是这个意思。

我们可以将一个符文序列表示为一个int32序列。这种编码方式叫UTF-32或UCS-4每个Unicode码点都使用同样的大小32bit来表示。这种方式比较简单统一但是它会浪费很多存储空间因为大数据计算机可读的文本是ASCII字符本来每个ASCII字符只需要8bit或1字节就能表示。而且即使是常用的字符也远少于65,536个也就是说用16bit编码方式就能表达常用字符。但是还有其它更好的编码方法吗