Key_Mou_Pad 板


LINE

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







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Soft_Job站內搜尋

TOP