Unicode、UTF-8、UCS等字的意義

作者  Tiberius (小敗踢)                                    看板  Key_Mou_Pad
標題 [萬能] UTF-8 與 Unicode
時間 Sat Mar 4 13:32:26 2006

看到有些人混用 UTF-8 與 Unicode, 想想還是出來澄清一下


「這兩個東西是不一樣的」


UTF-8 的 "UTF" 指的是 "Unicode Transformation Format", "Unicode 變換格式" 這是一種儲存
Unicode 字元的編碼方式


(下面為了說明方便起見, 以 U+ 開頭的是 Unicode 的字碼, 0x 開頭的是一般的 bytes 編碼)

##CONTINUE##

為什麼要轉換編碼呢? 理由有好幾個:



  1. Unicode 一個字的字碼長 32 bits, 拿來表示英文字太浪費了 (這是主要理由). 原本在 ASCII 範圍內的字, Unicode
    沒有改變編碼 0x00 到 0x7F 直接對應 U+00000000 到 U+0000007F, 直接傳 Unicode 的話, 就是一堆浪費空間的 0 ...

  2. Unicode 字碼在網路上傳送的時候很難同步, 傳爛一個 byte, 後面就全毀了. 因為每個 byte 都有可能是 0x00 到 0xFF (第一個
    byte 例外, 0x00 - 0x7F). 只要錯漏了一個 byte, 就不知道該從哪邊開始抓 4 bytes 當成一個字解碼啦.

因此後來發展出許多編碼形式, 以便節省資料空間, 方便在網路上傳送. 其中最常用到的編碼方式是 UTF-8, 它受歡迎的原因有下列幾點:



  1. 原本的 ASCII 範圍字元 (U+0000 到 U+007F) 儲存方法一樣, 不必改變. 所以純英文的 ASCII 文字檔就是合法的 UTF-8
    文字檔.
  2. 編碼結果裡面不會用到 Null (0x00), \ (0x5C) 與 0xFF, 有寫程式的就知道這代表什麼意思 ...
  3. UTF-8 可以看得出「哪邊是一個字碼的開始」,所以中間傳爛的話不會壞一整串, 比如說, 0xC0 ~ 0xDF 代表這是 2 bytes 字碼的第一個
    byte. 然後呢, 0x80 ~ 0xBF 一定是長字碼後面的 bytes, 傳爛的話, 很容易就能抓出下一個字從哪邊開始.
          0xE0 ~ 0xEF          3 bytes
0xF0 ~ 0xF7 4 bytes
0xF8 ~ 0xFB 5 bytes
0xFC ~ 0xFD 6 bytes

上面有人拿 "史" 當例子, 它的 UTF-8 編碼是 0xE58FB2, 解回 Unicode 就是 U+53F2


中文 (漢字) 編成 UTF-8 多半需要 3 bytes, 比以往 Big5 稍微肥一點. 但是就小弟翻譯的經驗來看 ... 同樣的意義, 英文
(ASCII) 與中文 (UTF-8) 比較, 中文佔用的儲存空間還是比較小!! 某種角度來說, 可見中文博大精深啊!


感謝讀完, 以後不要再把 Unicode 跟 UTF-8 搞混囉! 尤其是 Unicode (UTF-8) 這種寫法, 很容易造成誤會的.


追伸


除了 Unicode 官方文件之外, IETF 也以 RFC2044 -> RFC2279 -> RFC3629 規範 UTF-8.


為什麼要在 UTF-8 後面特別加上 "-8"? 當然是因為還有其它 UTF 啦!


比如說 UTF-7 (少用, 專門對付連 8-bit 都不能處理的終端機), UTF-16 (UCS-2), UTF-32 (UCS-4) 等等


這邊又出現新縮寫了, UCS = "Universal Character Set" 指的是 ISO 10646 這個國際標準


ISO 10646 "不等於" Unicode, 兩邊有著錯綜複雜的歷史淵源 ... 不過請有興趣的人自己查吧, 這邊不談政治


原本 UCS-2 可直接對應 ISO 10646 的第 0 面 (Plane 0) 不需再次編碼, 也就是 "基本多語系字面" (BMP; Basic
Multilingual Plane)


但是後來發現, 區區六萬個碼位根本不夠用, 漢字之多啊 ...


隨著 Unicode 擴充, ISO 10646-1:2000 / Unicode 3.0 / RFC2781 制定了 UTF-16, 以便在大致相容
UCS-2 的情形下表示所有 Unicode 字元 (每字 31 bits)


不必編碼的表示方式, 就由 UCS-4 (UTF-32) 負責承接了.


說到這個, Unicode 把漢字資料整理得不錯, 有個 Unihan Database 可以看. 每個漢字的筆劃數、各國寫法 (簡繁日韓)、各國發音
(廣東,國語,唐朝,音讀,訓讀)、各國字典部首排序 (康熙,大漢和,漢語大字典)、漢字意義 ... [http://www.unicode.org/charts/unihan.html]


最重要的是 ... 有放公開下載, 而且是很容易用程式處理的格式!!! 書翻完之後就用這個來做 MySQL 的中文部首、拼音、筆劃排序吧

  1. gravatar

    # by 匿名 - 2013年1月29日 下午5:03

    Bonuses

    Feel free to surf to my web blog ... file for bankruptcy
    My webpage ; home foreclosure

  2. gravatar

    # by 匿名 - 2013年1月29日 下午5:14

    Tips Good Name For Any Not known Telephone Number

    Here is my web site lawyer search engine optimization
    Here is my site leads for lawyers

  3. gravatar

    # by 匿名 - 2013年1月30日 上午9:21

    Learn More Here

    Feel free to visit my weblog - lawyer leads
    Feel free to surf my website ... attorney leads

  4. gravatar

    # by 匿名 - 2013年4月20日 上午1:58

    Read Terry Jennings reviews if you are looking for Time Warner
    Cable Bundle Deals or Time Warner Communications Service to
    find the best deals. CBS began the trend when it split from Viacom; in
    2006 CBS CEO Leslie Moonves proclaimed he would get paid for CBS content.
    But if you don't know what to look for you can end up with a low resolution picture with washed out colors.

    My blog post :: oceanic cable

笔者非专业IT人员,仅仅是业余IT爱好者;

本博客转载皆注明出处,各位如果想转载也请注明出处;

有其他任何的问题,请联系此电邮xyjswf@gmail.com。

I'm not a professional IT staff,only an amateur enthusiasts;

Reproduced in this blog are marked with the source, that if you want to reprint please indicate the source;

Have any other question,please relate to this email xyjswf@gmail.com.