跳到主要內容區塊

ntuccepaper2019

技術論壇

我的名字怎麼變成了問號?-中文資料處理漫談
  • 卷期:v0014
  • 出版日期:2010-09-20

作者:許凱平 / 臺灣大學計算機及資訊網路中心程式設計組程式設計師


本文以一般的校園資訊系統的使用者為對象,從文字的創造、訊息的傳遞到資訊系統文字服務做一簡單的介紹。最後說明為什麼有些字會變成亂碼,以及使用者可以採取的處理方式。

 

背景

 

在沒有文字的蠻荒時期,先民在洞穴中以圖畫記錄他們的故事,留給後人美麗的壁畫。有一天,中外的「倉頡」不約而同地將圖畫線條化,形成了最早的文字。隨著人類生活的擴展,這些文字漸漸不夠用了。古代中國人,以二維組合的方式創造新字(六書),西方世界則以原始文字作為拼音的符號,以記錄語音的方式產生了新字(如圖1)。一個書寫系統所使用的全部字元稱為「字元集」。英文只需26個字母,中文的字集卻包含上數萬字。語言與文字並非不可分割,同一種語言可能會有多個書寫方式,不同的語言也可使用相同的字元集[1]。

將訊息加以變換再做傳送,可以減少在傳輸過程中洩密的風險。如圖2a所示,將「NO FOOD」改寫(加密)為「OP GPPE」,收信的人再依據對照表還原訊息(解密)。文字也可以變換成無線電波,例如以摩斯電碼將文字編碼以調幅或調頻的方式傳送出去,遠方的報務員聽到後再會還原(解碼)成電文(圖2b)。

資訊系統

資訊系統中的「字元表」則是將一個數字與一個字元建立一對一的對應的對照表。訊息的發送端跟接收端必須根據同一個對照表,才能正確解譯資料。如圖2 (c)所示,發送端根據ASCII字元表將訊息ACE以41,43,45三個數字發送出去。接收端以ASCII字元解讀,就可以解回「ACE」;如果接收端不慎以EBCDIC 字元表解讀的話,就會變成「□äá」。電腦提供的文字服務除了儲存之外,也必須將之顯示在螢幕上或列印出來,這時依賴的就是「字型」,沒有字型可以對應的文字常常就會變成空白、問號或亂碼。

掌握了字元表、字型、編碼與解碼等重要概念後,我們再來看看中文的數位化議題。如同英文環境,中文字元也需要一個對應表將每一個字加以編號。最常見的字元集大概就是Big5[2]和Unicode[3]兩個字集。Unicode只規定了每一個字的對應數字,至於這個字怎麼儲存,則由UTF定義。UTF後面跟的數字是代表用幾個bits編碼,常見的有UTF-8與UTF-16。
微軟Windows 2000(含)之後就以UTF-16為內碼。在這樣的環境之下,碰到舊的應用程式,作業系統會自動轉換成Big5以維持回溯相容。但由於Unicode字集大於Big5,所以會有一些字對應不到。為了避免一些舊程式在使用者輸入非Big5的字造成問題,我們可以在輸入法設定成限定Big5,也可以省去從大量候選字找字的麻煩(如圖3)。

 

 

HTML

最後我們來看看現在大家最常接觸的應用程式:瀏覽器。瀏覽器的文件標準
HTML檔案是一種文字檔。在HTML檔內可以加上Meta Tag 給瀏覽器在解譯內容的時候有所遵循。如果沒有標示或標示錯誤,就會造成一大片亂碼的現象,加上標示才能減少瀏覽器解譯錯誤的可能。例如要表明傳送的HTML內容是以Big5編碼的話,在 head模組加上

Art editor Img

以利瀏覽器正確判讀。

 

即使是正確標示的網頁文件,也可能有幾個字無法呈現的情形:可能是瀏覽器不支援該字集、作業系統沒有該字型或是外字的情形。靠使用新的瀏覽器作業系統或安裝多語言支援可以解決前兩種情形。外字就是非字元集內的字,由該資訊系統的使用者依照自己或組織需求建立的字。如前述,資訊系統中一個字包含兩個部份,字型(圖形)與字碼(數字)。如果該字的字碼在您的電腦上沒有對應的圖形,便會出現「?」或者看不到的情形。以學校為例,因為有些學生的姓名不在Big5字集的關係,所以必須針對這些字造字,指定內碼、字型跟輸入法對應。資訊系統的使用者,也必須安裝學校造字檔才看得到含外字的資料。

 

結論

在校園資訊系統要排除姓名變成問號的情形,似乎是請使用者安裝台大造字檔就可以解決了。隨著網際網路的快速進展,許多程式與資料都已支援Unicode。長遠來看,現有的Big5資料與程式,有機會的話也值得加以處理。從資料來說,有些Big5的外字在Unicode中已經包含了,如果能將這些字對應到Unicode,應該就可以省去使用者安裝造字檔的麻煩。從程式來說,也應該對於Big5 的程式改寫以支援Unicode[4]。

 

參考文獻與相關連結

[1] 文字(書寫系統), 維基百科, http://en.wikipedia.org/wiki/Writing_system.
[2] CNS11643, 中文全字庫, http://www.cns11643.gov.tw/
[3] Unicode, Unicode Consortium, http://unicode.org/
[4] Unicode 補完計畫, http://uao.cpatch.org/