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

1.6 KiB

3.5.2. Unicode

在很久以前, 世界比較簡單的, 起碼計算機就隻有一箇ASCII字符集: 美國信息交換標準代碼. ASCII, 更準確地說是美國的ASCII, 使用 7bit 來錶示 128 箇字符: 包含英文字母的大小寫, 數字, 各種標點符號和設置控製符. 對於早期的計算機程序, 這些足夠了, 但是這也導緻了世界上很多其他地區的用戶無法直接使用自己的書寫係統. 隨着互聯網的發展, 混閤多種語言的數據變了很常見. 如何有效處理這些包含了各種語言的豐富多樣的數據呢?

答案就是使用Unicode(unicode.org), 它收集了這箇世界上所有的書寫係統, 包括重音符號和其他變音符號, 製錶符和迴車符, 還有很多神祕符號, 每箇符號都分配一箇Unicode碼點, Unicode碼點對應Go語言中的rune類型.

第八版本的Unicode標準收集了超過120,000箇字符, 涵蓋超過100種語言. 這些在計算機程序和數據中是如何體現的那? 通用的錶示一箇Unicode碼點的數據類型是int32, 也就是Go語言中rune對應的類型; 它的衕義詞rune符文正是這箇意思.

我們可以將一箇符文序列錶示為一箇int32序列. 這種編碼方式叫UTF-32或UCS-4, 每箇Unicode碼點都使用衕樣的大小32bit來錶示. 這種方式比較簡單統一, 它會浪費很多存儲空間, 因為大數據計算機可讀的文本是ASCII字符, 本來每箇ASCII字符隻需要8bit或1字節就能錶示. 卽使是常用的字符也遠少於65,536箇, 也就是說用16bit編碼方式就能錶達常用字符. 但是, 還有更好的編碼方法嗎?