Monday, March 22, 2010

[Study] Unicode、Encoding(編碼)


前幾天有篇文章忽然出現在河道上浮浮載載,又身為被點名的「軟體開發者(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-127128-255system
ASCII0-31: 控制字元

32-127: 數字、英文字母大小寫、常用符號
未定義使用
ANSI同ASCII似ISO Latin-1Windows 3.x

Windows 95
IBM PC Extended Character Set (ECS)同ASCII定義歐洲字元(European characters)DOS
Roman-8
European characters
HP
ISO Latin-1Web 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:

  1. ASCII Characters for MPE Users
  2. Windows Uses the ANSI Character Set
  3. IBM PC Extended Character Set (ECS)
  4. European Characters in Web Pages
  5. Roman-8 European Characters (HP)
  6. [wiki] Code Page
  7. [wiki] Unicode(中) or [wiki] Unicode
  8. [wiki] Character encoding

Comments

0 Responses to "[Study] Unicode、Encoding(編碼)"

Post a Comment

Tags