首頁>Club>
6
回覆列表
  • 1 # 大眼睛的諾諾

    因為一些歷史原因,Windows記事本的“Unicode”這個名號其實相當有誤導性。這個編碼實際上是UTF-16 LE。Unicode的字元碼,很少在計算機中直接用在儲存和表達文字上。原因無他:太浪費空間了。Unicode字元碼是32位,4個位元組。平常使用的字元裡,99%以上的字元都不會突破2個位元組。為了節省空間,人們就對Unicode的字元碼再做二次編碼,這就誕生了UTF-8,UTF-16,UTF-32等編碼標準。除了UTF-32,UTF-8和UTF-16都是不定長的編碼,他們的意思是按照編碼規則,將一個Unicode字元的字元碼,編碼成N個8位或者N個16位。至於N是幾,要看具體的字元來定。UTF-32例外的原因是,他已經足夠直接儲存Unicode的字元碼了……LE是“小端”的縮寫。因為只要是多位元組的資料,就有端序問題,也就是高位位元組在先還是低位位元組在先的問題。windows平臺預設小端,即低位位元組在先。Windows身上的“歷史原因”,在於Unicode標準初生的時候,字元碼其實是16位,那個時候的UTF-16就能直接儲存Unicode字元碼。於是Windows就直接將自己使用的UTF-16 LE編碼命名為“Unicode",這在當時是名符其實的。但是後來西方人尷尬地發現如果把華人故紙堆裡的罕用字,各種小語種的文字都收進去的話,16位65536個碼位仍然是不夠用的。Unicode升級成了32位,出現了字元碼突破16位的字元,UTF-16從定長碼變成了不定長碼,對於Windows來說,這就很坑爹了。儘管字元碼在16位以內的字元,UTF-16編碼仍然保持不變,但還是很坑爹。在儲存和傳輸文字的時候,用UTF-8很多,是因為對於大量以拉丁字母等ANSI字元為主的文獻,UTF-8非常節省空間。但計算機處理文字的時候,記憶體中一般都不用UTF-8。因為UTF-8是變長編碼,不從頭掃描一遍,你不知道第幾個字元在哪個位置上,這在處理的時候非常浪費時間。現在很多語言/程式的處理辦法,是使用源於原始UTF-16的一個定長編碼,只處理字元碼在16位以內的字元,不支援超過16位的罕見字。這種16位定長的編碼方式被稱為UCS-2。那些零星的幾個突破16位的字元,除非你專門研究古文或者奇怪的小語種,一般來說是遇不到的。遇到了也是黑人問號臉。比如,還有。嗯,我提交後就發現知乎後臺就不幸被我命中,無力處理這兩個擴充套件漢字,於是只好編輯一下,用圖來表示他們。他們是以及能處理所有Unicode字元的語言/程式也是有不少的。不怕浪費空間的,就用UTF-32,不怕浪費處理時間的,就用完整的UTF-16,或者索性用UTF-8。

  • 中秋節和大豐收的關聯?
  • 做風鈴需要的材料?