[爆卦]Utf8 中文 範圍是什麼?優點缺點精華區懶人包

為什麼這篇Utf8 中文 範圍鄉民發文收入到精華區:因為在Utf8 中文 範圍這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者Tiberius (小敗踢)看板Key_Mou_Pad標題[萬能] UTF-8 與 Unicod...


看到有些人混用 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?)

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 211.74.178.119
solaris10:請問什麼叫做「MySQL 的中文部首、拼音、筆劃排序」? 03/04 13:53
solaris10:像這樣的程式嗎? http://tinyurl.com/plfg3 03/04 13:55
Tiberius:就是可以 ORDER BY 中文欄位, 依照筆畫順序顯示資料 03/04 13:58
Tiberius:您推的這個也是 Unihan Database 呀! XD 03/04 14:00
solaris10:因為前兩個禮拜剛好在研究 unihan,所以看了很多網站 03/04 14:03
PsMonkey:..... [抬頭] .... [抬頭] .... [筆記ing] 03/04 14:11
rockzero:推~~對號入座一下 :) 03/04 14:12
bluepc:推~~ :P 03/04 14:35
※ 編輯: Tiberius 來自: 211.74.178.119 (03/04 15:19)
blc:UTF-7的話,我的手機(k700i)有用到… 03/04 15:23
ithinkurdumb:nice 03/04 17:47

你可能也想看看

搜尋相關網站