前幾天有篇文章忽然出現在河道上浮浮載載,又身為被點名的「軟體開發者(Software Developer)」,於是相當認真的看了一下… 相當慚愧的,我還是不懂orz
文章在這:
中文版: 每個軟體開發者都絕對一定要會的Unicode及字元集必備知識(沒有藉口!)
英文版: The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)
我覺得可能是因為本身對整個編碼的基礎知識相當薄弱,所以造成對內文的理解與接受度也大幅度降低惹... Q口Q,既然是欠缺基礎,還是做點筆記吧… 不過我後來有注意到其實這篇文章已經有點年紀了… 所以不太確定他的內容或是他所提供的參考資料是否還跟的上事實。
Code pages、字元集(character set)、encodings
編碼系統 | 0-127 | 128-255 | system |
ASCII | 0-31: 控制字元 32-127: 數字、英文字母大小寫、常用符號 | 未定義使用 | |
ANSI | 同ASCII | 似ISO Latin-1 | Windows 3.x Windows 95 |
IBM PC Extended Character Set (ECS) | 同ASCII | 定義歐洲字元(European characters) | DOS |
Roman-8 | European characters | HP | |
ISO Latin-1 | Web browsers |
Unicode
Unicode(統一碼、萬國碼、單一碼、標準萬國碼)是業界的一種標準,它可以使電腦得以呈現世界上數十種文字的系統。在文字處理方面,Unicode的功用是為每一個字元提供一個唯一的代碼(Code Point, 即一組數字),而不是一種字形。換句話說,Unicode是將字元以一種抽象的方式來呈現,而將視覺上的演繹工作(例如字體大小、外觀形狀、字體形態、文體等)留給其他軟體來處理,例如網頁瀏覽器或是文字處理器。
Encodings (編碼)
方法一:UCS-2(UTF-16)
每個字元(的代碼, code point)佔用2個byte(也就是16 bit),所以理論上最多可以以16 bit去定義出65,536個字元(216)。但事實上unicode並為用滿整個16 bit,所以還有擴展空間。而UCS-2又分為high-endian(Big-Endian, 大端序)與low-endian(Little-Endian, 小端序)兩種讀取順序/模式,因為不同機器(CPU)對byte會有不同的理解順序。
方法二:UTF-8
因為UCS-2的編碼方式會造成基本英文字母浪費了相當多的bit空間,於是發展出UTF-8。在UTF-8的系統裡,0-127的基本符號、英數字母都只佔一個byte,128以上的字元則不一定,大部分佔2-3 byte,最多甚至可到6 byte。
補充:
根據wiki上的說法,其實編碼方式跟實現方式是兩回事:上面提到的UCS-2是編碼方式,而Unicode的實現方式稱為Unicode轉換格式(Unicode Translation Format,簡稱為UTF)。
還有許多其他編碼方式都只能正確儲存部分代碼(code points), 其餘他們不認得的編碼會變成問號(?)。通常UTF-7, 8, 16, 32可以正確儲存所有的代碼(code points)。
以上!! 吸收完畢!! 希望是對的=_______=。
Ref:
Post a Comment