[心得] Unicode 補完計畫 (UAO)
(本篇在某些細節處可能會稍有錯誤,還請指正)
系統字元編碼 (ASCII、codepage)
很久很久以前,美國人做出電腦時只考慮了歐洲語系,沒考慮到東方語系的問題
當時採用的國別 codepage 方法,編碼只有 8 bit (1 byte),最多 255 個字
前面 127 個字元 (只用 7 bit) 是一些字母、符號和控制字元,相容 ASCII 標準
後面 127 個字元叫「高位元」(因為用到 8 bit),則是按 codepage 而不同
預設的 codepage 是 437,裏面有西歐語言字母和表格框線的符號
http://en.wikipedia.org/wiki/Code_page_437
東亞語言雙字元系統編碼 (DBCS)
之後,東亞地區也有很多人在使用電腦了,
不能一直只有英文字,於是各國就開始發展各國語言的編碼系統
因東亞文字數量太多,就採用兩個 byte 來組成文字,理論上最多可有 65535 個字
(實際上當然不可能有這麼多,因為低位元部分要保留給英文字母和符號,
第一碼只能用高位元,否則到時像「at」這樣普通的英文字都被轉成文字)
各國各有自己的編碼,台灣香港 BIG5、日本 SJIS、中國 GB、韓國 KS
例如在 BIG5 裏面「特」字的編碼是 AF53,表示由十六進位的 AF、53 兩碼組成
AF (175) 是「>> 」,53 (83) 是「R」
在中文模式下,只要發現這兩個字元組合在一起,系統就會將之轉成「特」字
就因這原理,故常有一些英文軟體畫面的框線在中文模式下變成亂碼
(eg. C4C4C4C4「────」 會變成「闡闡」)
而在 SJIS 裏面,AF53 是「ッR」,在 GB 裏面是「瘲(的簡體)」
也就是說,同樣的碼用不同的系統來看會是不同的字
BIG5
台灣在那時其實是「萬"碼"奔騰」,各公司都推出自己的中文編碼,沒有統一
後來資訊公統一弄出了 BIG,到後來卻成了主流
當時 BIG5 編碼是非常急就章而推出的,選字根本就是依據教育部的常用字標準,
所以很多字都沒被選入 (eg.堃、煊、喆) 但因變成主流,大家只好將就著用
(政府戶政、圖書管理等系統用不同的編碼,所以字數多很多)
Unicode
後來有一群人/公司開始發展 unicode,也就是將世界上主要的文字統一編碼
只要電腦支援該編碼、有相對應的字型,就可以看到所有文字
http://zh.wikipedia.org/wiki/Unicode
unicode 下的編碼方式和 BIG、GB、SJIS 等傳統編碼 (稱為 DBCS) 有點不一樣,
以目前最常用的 UTF8 來說,它按照文字的屬性分為用 1 byte 組成的、
用 2 byte 組成的...到用 4 byte 組成的,普通的中文字多是 3 byte 組成
http://zh.wikipedia.org/wiki/UTF-8
有人認為中文、日文、韓文、越南文中很多漢字其實都一樣或是差不多,
所以推動 CJKV,以將編入 unicode 中的漢字數量縮減
http://zh.wikipedia.org/wiki/CJKV
以上是講古,以下開始講到重點了
倚天中文
'80、'90 年代初,佔市場比例最大的是「倚天」的中文系統
倚天當時在 BIG5 保留的「造字區」放了一些部首、符號、日文假名、俄文字母
在 DOS 時代很常被使用者用到,累積了不少用到那些字的文件資料
萬惡的淵藪、一切問題的起源:微軟
時代繼續發展,萬惡的微軟推出 Windows,將正體中文編為 codepage 950
但是,沒把前述造字區中的日文、俄文字母以及某些符號收進去!
之後一直到 Win2003,除了新增了歐元符號以外,還是沒日文字
(沒用 Vista ,不知道 Vista 的情形)
http://zh.wikipedia.org/wiki/Big5
這就是今天發生這個問題的起源!
話說微軟放了造字區的符號進正體中文 CP 950,但就是日文假名、俄文字母不收
簡體中文 CP 936 甚至連日製漢字、常用正體字都弄進去了,CP 950 卻是啥都缺
(Win9x 時代,大多是用匯入 eudc、font.24 等使用造字區的方式來解決)
到了 Win NT 之後,系統都採用 unicode 做內部處理,
如果應用軟體也使用 unicode,那當然沒有問題
但是對於一些仍用以前 DBCS 編碼的軟體,Windows 就使用 codepage 轉換方式
CP 950 (正體中文) unicode CP 932 (日文)
特 (AF53) <-> 特 (U+7279) <-> 特 (93C1)
也就是:從 DBCS 軟體貼到 unicode 的軟體時,系統會做內碼切換,反之亦然
但是,在繁體中文的 CP 950 中並沒有日文假名,當然更沒有日製漢字
所以中文 Windows 下,不支援 unicode 的軟體碰到此類未對應的 unicode 字元時
轉換會出問題,變成 ? 或 _,若檔名就有這種字元時,則連該檔案都無法開
(漢字部份則拜 CJKV 所賜,大多可以直接轉換)
簡單來說,若是有名稱含日文假名的檔案
因為 Windows 檔案系統可處理 unicode,所以 Windows 下看得到日文
而不能讀 unicode 的軟體則只能看到 ? ,要開啟檔案時會讀取失敗
CP 932 (日文) unicode CP 950 (正體中文)
あ (82A0) <-> あ (U+3042) -> ?
Unicode 補完計畫 (Unicode at Once)
「Unicode 補完計畫」就是為了解決這問題而出現的
當初它的名字叫「Big5 Extension」,意思就是擴充 BIG5 缺少的部分
(結果改成現在名字後反而產生被人誤會的問題)
它的做法:
CP 932 (日文) unicode CP 950 (正體中文)
あ (82A0) <-> あ (U+3042) <-> あ (C6E8)
(U+F6F8) ↗
它修改 unicode 對 CP950 的轉換對照表
使 unicode 日文假名在非 unicode 狀況下改去用原倚天的造字區編碼
甚至還增加對應 unicode 日製漢字、簡體中文、特殊正體中文字 (也是用造字區)
Unicode 補完計畫的問題點
由於對應的是 CP 950 沒有使用到的區域 (原 BIG5/倚天 的造字區)
因此不支援 unicode 軟體弄出來的字,在未裝 uao 的電腦上看時會是空白
使用者若沒注意到這點而大量用不支援 unicode 的軟體處理檔案,結果就發生慘案
unicode CP 950 (正體中文)
(U+F6F8) <- あ (C6E8)
↖ 必須有裝造字才看得到
要有裝 uao 的電腦才能看到字
unicode CP 950 (正體中文)
あ (U+3042) <- あ (C6E8)
當然,若都是在 unicode 環境下就完全沒有問題了
unicode unicode
あ (U+3042) <-> あ (U+3042)
只不過,目前不支援 unicode 的軟體仍為數不少
或者用慣了的軟體不支援 unicode,有支援的卻又功能不符合需求、用不慣
按人的惰性來看,只要還有這種情況,uao 就仍會一直存在、就會有人去使用
如果真要使用 uao,就必須時常注意軟體輸出的文字是否變成 BIG5 了
否則雖然自己電腦看得到,但傳出去在沒有 uao 的電腦上看到的都是空白啊
可能發生的情形整理表
在有 uao 的系統 在無 uao 的系統
字碼 支援 unicode 不支援 unicode 支援 unicode 不支援 unicode
----------- ------------ -------------- ------------ --------------
Unicode |
あ (U+3042) | あ (U+3042) あ (C6E8) あ (U+3042) ?
|
|
Unicode |
(U+F6F8) | あ (U+3042) あ (C6E8) (U+F6F8) あ (C6E8)
|
| 必須有裝造字才看得到 ↗
BIG5 |
あ (C6E8) | あ (U+3042) あ (C6E8) (U+F6F8) あ (C6E8)
|
| 必須有裝造字才看得到 ↗
SJIS |
あ (82A0) | あ (U+3042) あ (C6E8) あ (U+3042) ?
| あ (82A0)
註:U+F6F8 是位於 unicode 的造字區,通常沒有字型會去對應
U+3042 才是 あ 的正式 unicode 編碼
參考資料
http://uao.cpatch.org/index.php?%E5%8E%9F%E7%90%86%E4%BB%8B%E7%B4%B9
http://uao.cpatch.org/index.php?%E5%8E%9F%E7%90%86%E8%A3%9C%E5%85%85
--
○ 再一次 ╳ 在一次 ○ 騎車戴安全帽 ╳ 騎車帶安全帽
○ 幹得好 ╳ 幹的好 ○ 知道 ╳ 知到
○ 名字 ╳ 名子 ○ 抽菸 ╳ 抽煙
○ 坐捷運 ╳ 做捷運 ○ 誹謗罪 ╳ 毀謗罪
○ 好厲害 ╳ 好利害 ○ 應該 ╳ 因該
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.229.46.166
推
11/02 19:36, , 1F
11/02 19:36, 1F
推
11/02 19:51, , 2F
11/02 19:51, 2F
推
11/02 19:59, , 3F
11/02 19:59, 3F
推
11/02 20:01, , 4F
11/02 20:01, 4F
推
11/02 20:10, , 5F
11/02 20:10, 5F
推
11/02 20:15, , 6F
11/02 20:15, 6F
→
11/02 20:16, , 7F
11/02 20:16, 7F
推
11/02 20:17, , 8F
11/02 20:17, 8F
推
11/02 20:18, , 9F
11/02 20:18, 9F
推
11/02 20:17, , 10F
11/02 20:17, 10F
推
11/02 20:18, , 11F
11/02 20:18, 11F
推
11/02 20:23, , 12F
11/02 20:23, 12F
推
11/02 20:31, , 13F
11/02 20:31, 13F
推
11/02 20:35, , 14F
11/02 20:35, 14F
推
11/02 20:36, , 15F
11/02 20:36, 15F
推
11/02 20:39, , 16F
11/02 20:39, 16F
推
11/02 20:40, , 17F
11/02 20:40, 17F
推
11/02 20:41, , 18F
11/02 20:41, 18F
推
11/02 21:08, , 19F
11/02 21:08, 19F
推
11/02 21:27, , 20F
11/02 21:27, 20F
推
11/02 21:42, , 21F
11/02 21:42, 21F
推
11/02 21:54, , 22F
11/02 21:54, 22F
推
11/02 21:54, , 23F
11/02 21:54, 23F
因為按東亞處理資訊的情況來看,會用到日文的機會相當大,但微軟卻不將之放入
對岸的 CP 936 卻完整放進去了,且不只假名而已,連日製漢字、正體中文字都有
雖說用 unicode 就沒問題了,但仍有為數很多的不支援軟體啊
不然怎會跑出 uao 來呢?
推
11/02 21:54, , 24F
11/02 21:54, 24F
→
11/02 21:55, , 25F
11/02 21:55, 25F
推
11/02 22:17, , 26F
11/02 22:17, 26F
推
11/02 22:50, , 27F
11/02 22:50, 27F
推
11/02 23:02, , 28F
11/02 23:02, 28F
推
11/02 23:04, , 29F
11/02 23:04, 29F
※ 編輯: mstar 來自: 61.229.46.166 (11/03 10:00)
推
11/03 10:40, , 30F
11/03 10:40, 30F
推
11/03 20:24, , 31F
11/03 20:24, 31F
推
11/04 16:52, , 32F
11/04 16:52, 32F
→
11/04 16:53, , 33F
11/04 16:53, 33F
※ donkeychen:轉錄至看板 IME 11/04 16:53
推
11/08 18:17, , 34F
11/08 18:17, 34F
討論串 (同標題文章)
EZsoft 近期熱門文章
PTT數位生活區 即時熱門文章