UTF-8 與 Unicode - 鍵鼠

Emily avatar
By Emily
at 2006-03-04T13:32

Table of Contents

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

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

UTF-8 的 "UTF" 指的是 "Unicode Transformation Format", "Unicode 變換格式"

這是一種儲存 Unicode 字元的編碼方式

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

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

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
0xE0 ~ 0xEF 3 bytes
0xF0 ~ 0xF7 4 bytes
0xF8 ~ 0xFB 5 bytes
0xFC ~ 0xFD 6 bytes
然後呢, 0x80 ~ 0xBF 一定是長字碼後面的 bytes
傳爛的話, 很容易就能抓出下一個字從哪邊開始

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

中文 (漢字) 編成 UTF-8 多半需要 3 bytes, 比以往 Big5 稍微肥一點

但是就小弟翻譯的經驗來看 ...
同樣的意義, 英文 (ASCII) 與中文 (UTF-8) 比較
中文佔用的儲存空間還是比較小!!
某種角度來說, 可見中文博大精深啊! XD

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

==
追伸 (寫著寫著變成進階閱讀了?)

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

為什麼要在 UTF-8 後面特別加上 "-8"? 當然是因為還有其它 UTF 啦! XD
比如說 UTF-7 (少用, 專門對付連 8-bit 都不能處理的終端機),
UTF-16 (UCS-2), UTF-32 (UCS-4) 等等

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

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

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

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

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

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

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

(例: http://0rz.net/da16Z)

最重要的是 ... 有放公開下載, 而且是很容易用程式處理的格式!!! XD

書翻完之後就用這個來做 MySQL 的中文部首、拼音、筆劃排序吧
(這個有沒有人有興趣? 有的話寄個站內信給我, 光寫「有」一個字也好 XD?)

--
Tags: 鍵鼠

All Comments

Olivia avatar
By Olivia
at 2006-03-05T04:17
請問什麼叫做「MySQL 的中文部首、拼音、筆劃排序」?
Noah avatar
By Noah
at 2006-03-06T20:42
像這樣的程式嗎? http://tinyurl.com/plfg3
Charlotte avatar
By Charlotte
at 2006-03-09T14:28
就是可以 ORDER BY 中文欄位, 依照筆畫順序顯示資料
Agatha avatar
By Agatha
at 2006-03-11T16:50
您推的這個也是 Unihan Database 呀! XD
Todd Johnson avatar
By Todd Johnson
at 2006-03-13T05:22
因為前兩個禮拜剛好在研究 unihan,所以看了很多網站
Emily avatar
By Emily
at 2006-03-16T02:25
..... [抬頭] .... [抬頭] .... [筆記ing]
Ursula avatar
By Ursula
at 2006-03-16T05:11
推~~對號入座一下 :)
Daniel avatar
By Daniel
at 2006-03-20T17:35
推~~ :P
Quintina avatar
By Quintina
at 2006-03-22T13:02
UTF-7的話,我的手機(k700i)有用到…
Frederic avatar
By Frederic
at 2006-03-24T22:32
nice

Taclick 退費

Edward Lewis avatar
By Edward Lewis
at 2006-03-03T19:23
我剛剛已經完成了第二批退費名單的退費了 第二批退費名單 1/27 0:00 ~ 2/22 23:59 請在第二批退費名單中的版友,明天確認一下帳款是否有誤 有問題請馬上告知,謝謝 第三批退費名單為 2/23 0:00 ~ 3/1 23:59 來信的版友 確認信寄出後我 ...

怎麼請免費空間?

Sandy avatar
By Sandy
at 2006-03-03T13:51
板規應該沒有禁止免費空間討論吧 以下是比較常用的免費空間..... 1. You send it (YSI) http://www.yousendit.com/ 優點:不用註冊,單檔最大1GB,保存7天,自動病毒掃描,可以續傳下載 支援HTTPS傳送:https://www.yousendit.com/ ...

自我介紹

Zenobia avatar
By Zenobia
at 2006-03-03T02:35
一、英文ID:lkjmn 二、中文暱稱:甲(?) 三、性別:男 四、來自何方:嘉義人,目前暫住高雄,高應大二技畢業,昨晚剛領到畢業證書(延畢orz) 五、想要說的話:鍵鼠板是個很恐怖的板, 常逛的話會走上敗家的無窮迴圈中... 還好我沒錢T_T....所以不會受到誘惑X ...

關於成本透明化之我見

Freda avatar
By Freda
at 2006-03-02T19:30
到我發表意見了,我是支持不要公開成本的。 誠如版主在11810篇所言,其強調的是合理性,有人強調的是便宜,有人強調價格 合理自由市場導向。我強調的則是只要可以保障交易安全,其他的點可以放寬。今天討 論的「公布成本」與否,完全和交易安全無涉。所以我認為應該不需要公開成本,交給 市場自由決定,來 ...

黃金珊瑚元素

Lucy avatar
By Lucy
at 2006-03-02T13:42
我以我的職業道德來說 人體的所需要的礦物質主要分兩類 主要礦物質和微量礦物質 顧名思義 就是說 主要礦物質在我們正常攝取的比較多 微量的畫比較少 鈉鉀氯磷硫鎂鈣為主要的礦物質 還有一部分是屬於微量的 鐵、銅、鋅、鉬、錳、鈷、鉻、碘、硒、氟 這些東西 量不要太多 多了就會中毒 像是銅中毒 氟是鹵素也是一種劇毒 ...