一個中文字,兩個位元組:Big5 這本 1984 年的字典,為什麼還在讓你看到亂碼
用信箱與字典的比喻說明 1984 年資策會制定的中文內碼如何用兩個位元組查字、亂碼的兩種成因,以及它與 CNS 11643 國家標準和 Unicode 的先後關係。
在 Big5 這套 1984 年由資策會制定的編碼裡,每個中文字都得先領到兩個位元組的號碼,才上得了螢幕;亂碼多半是送收兩端拿不同的字典對照出來的,而它的退場也沒有明確的哪一天。
在手機上打一個「中」字,按送出。真正離開輸入框的其實是一組號碼:在 Big5 的字碼表裡,「中」的編號是 A4A4。對方的裝置收到號碼,拿去查表,螢幕上才浮出這個字。這本號碼簿不是哪家國際組織頒布的,是 1984 年在臺北,由資策會策劃出來,之後在中文電腦圈通行了近二十年。
先把話說清楚:Big5 是一套中文字的號碼簿
Big5(文獻裡常寫作 BIG-5)是一套中文字內碼,用兩個位元組代表一個中文字,1984 年由財團法人資訊工業策進會策劃制定,配合當時的五大中文套裝軟體專案,後來成為臺灣中文電腦的業界事實標準。國發會的「全字庫」網站與中研院的《認識中文字元碼》,對這段來歷都有明確記載。
它重要在哪裡?今天的你不會直接感覺到它,但它留下了兩種遺產。一種是好的:在還沒有國際統一標準的年代,它讓中文在電腦上有了一致的號碼,軟體、印表機、公文系統照著同一本簿子辦事,BBS 時代與早期中文 Windows 裡的文字都靠它撐著。另一種是麻煩:這本簿子後來衍生出多個版本,亂碼、缺字、機關之間公文轉不過去,源頭都可以追到它身上。想弄懂舊檔案為什麼會變成一片亂碼,得先回到這套編碼的設計。
一個字,兩個號碼:查表怎麼進行
電腦只認得數字,任何文字要進機器,都得先編號。英文字母、數字與常見符號,早年由 ASCII 打底,一個位元組就裝得下,256 種組合夠用。中文的麻煩在於數量:字上萬個,一個位元組根本不夠,Big5 的辦法是每個字發兩個位元組。
可以想成電影院的座位。第一個位元組指出「排」,第二個指出「號」,兩個號碼湊齊,才指得到唯一的位子,也就是唯一的字。WHATWG 的編碼標準把解碼規則寫得很直白:第一個位元組落在 0x81 到 0xFE 之間時,解碼器先把它記下來,等第二個位元組抵達,再算出索引去查字;配對不完整,或者查表查不到這個位置,程式就回報錯誤,不硬拗出一個字來。
這種查表動作,在裝置裡一天跑上千次,使用者完全無感。日常裡類似這種看不見的底層處理還有別種,小米系統元件的加密上傳就是另一個例子:功能照常運作,轉換與搬運的細節全收在底層。
五種軟體、十三家廠商:號碼簿的來歷
時間軸先拉回 1983 年。原始 Big5 收錄的字並非重新設計,而是取自這一年公布的舊版通用漢字標準交換碼,常用字 5,401 個,次常用字 7,652 個。換句話說,Big5 提供的是編號方式,字本身沿用既有的標準字表。
隔年,經濟部出資,資策會與國內 13 家廠商合作推動「五大軟體專案」,目標是做出五種中文套裝軟體,Big5 這套內碼就是為了配合專案而策劃的。「Big-5」裡的五,指五種軟體;13 家廠商是專案的參與者。這兩個數字常被壓縮成「五家公司」,與原始記載對不上。
真正的隱患在維護。Big5 沒有專責機構看管,倚天、宏碁、IBM、微軟後來各自往裡面加字,各家加的位置不一樣。於是同一份文件,在這臺電腦上看得到某個字,換一臺就成了問號。政府機關的自造字更棘手:字在本機造出來了,交換對象的字碼表裡沒有這個字,公文轉換就停在原地。
同一時期還有另一條標準路線。CNS 11643 於 1986 年公告為國家標準,第一、第二字面與 Big5 的字集相同;2003 年,經濟部標準檢驗局委託中文數位化技術推廣基金會,把原始版與主要業界版本整理成 Big5-2003,以附錄形式掛在 CNS 11643 相關標準資料中。時間順序值得記住:1984 年的 Big5 是業界用出來的事實標準,1986 年的 CNS 11643 才是國家標準,兩者的身分不能對調。
亂碼的時候,字其實沒有壞
亂碼的原理可以一句話講完:送出端和接收端拿了不同的字典。資料用 Big5 編碼送出,接收端卻用另一套編碼表解讀,位元組一個都沒少,對照出來的字卻全變了樣。多數時候檔案是完好的,只是被拿錯的號碼簿唸了出來。
螢幕顯示與來源對不上時,使用者第一個懷疑的常是軟體本身。蘋果天氣那次全國多城零下 32 度的烏龍預報,後來追查的是資料來源;Big5 的亂碼同理,先檢查對照環節,再考慮資料本身壞了沒。
第二種亂碼更隱蔽。兩邊都宣稱用 Big5,但其中一邊安裝了廠商加過字的版本,送來的字落在加字區,另一邊的字碼表裡沒有這個位置,結果就是看不到。前述機關自造字卡在公文交換的狀況,就是同一種情境的公部門版。
三種常見誤傳
關於 Big5,流傳最廣的錯誤說法有三種。
第一種,把「五大」講成五家公司。五大是五種套裝軟體,13 家廠商是出資與合作的成員,兩件事被壓進同一句話,數字就對不上了。
第二種,把 Big5 直接稱為臺灣的國家標準。依全字庫的定義,國家標準是 CNS 11643,Big5 是業界沿用成真的事實標準。Big5-2003 只是 2003 年整理出的版本,不能倒推成它從 1984 年起就有國家標準身分。
第三種,替 Big5 找一個「停用日期」。Unicode 出現之後的移轉是漸進的,檔案一批一批轉,系統一套一套換,沒有哪一天宣告全面失效。要查證這類說法,回到全字庫與《認識中文字元碼》的記載最穩。
Unicode 接手之後,Big5 還活在哪些角落
Unicode 走的是另一條路:給世界上的文字各一個唯一編號,中文、日文、韓文、表情符號都收在同一張大表上;UTF-8 則是把這些編號裝進位元組的常見方式,長度可以彈性變化。各地區不再需要各印一本號碼簿,兩端拿不同字典的風險跟著下降。
接手是漸進的。新網頁、新系統改用 Unicode,舊檔案與部分機關系統裡的 Big5 仍在原地。國發會全字庫至今提供字碼查詢與轉換服務,處理的正是新舊並存時期的銜接需求。
對一般使用者,這段歷史留下兩個實用的判斷。開舊檔出現亂碼,先別急著刪,資料多半還在,改用其他編碼重開一次,經常就能救回來。名字裡的罕見字在某些系統印成方框,那多半是字集涵蓋範圍的問題,換到支援較大字集的環境就能顯示。
號碼簿從 ASCII 換到 Big5,再換到 Unicode,每一次換代處理的都是同一件事:讓送出端與接收端拿同一本字典。知道這一點,下次再看到亂碼,已經知道要先查哪裡。
資料來源:本站編輯參考 APPI News〈Big5 是什麼?台灣發明的中文字編碼為何會亂碼〉(作者:APPI 編輯部)改寫而成,原文出處;原文文字內容採 CC BY 4.0 授權。