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編碼方式就能表達常用字符。但是還有其它更好的編碼方法嗎