中文編碼 big-5 unicode

Big-5&Unicode中文轉碼

張凱欽Jimmy chang 2019/11/21 10:33:03
20348

1. 目的

在早期中文相關系統一般採用Big5,但後來因為越來越多的文字加入,造成編碼的侷限。為了解決該問題,採用新的觀念與架構有了新的Unicode轉換格式,一般常用的是UTF-8的編碼,但是新舊編碼的使用,在許多資料串接或是遺留系統上,很容易產生亂碼或資料錯誤等問題,本文即針對此問題提出解決方式。

 

2. 開始前準備

• Eclipse

• JDK 1.8

 

3. 轉碼

該文內的轉碼方式是透過政府資料開放平台有國家發展委員會之「CNS11643中文標準交換碼全字庫」網站的Date,內容有包含中文碼對照表,將該對照表讀入並自行轉碼。但對照表並沒有UTF-8跟Big5直接對照的資料,需透過CNS11643的標準作中繼實現轉換的功能。

Sample: 

先準備兩個來源檔案分別是Big5跟UTF-8格式的txt:

Big5:

Unicode:

 

Big5 to Unicode

3-1

將讀入的文字內容轉換成Big5編碼的List

3-2

將Big5編碼的List透過對CNS2Big5照表轉為CNS11643標準編碼

接著再透過CNS2Unicode的對照表轉換成Unicode編碼的List

3-3

將Unicode編碼的List轉換為文字

 

Unicode to Big5

3-4

將讀入的文字內容轉換成Unicode編碼的List

3-5

將Unicode編碼的List透過對CNS2Unicode 照表轉為CNS11643標準編碼

接著再透過CNS2Big5的對照表轉換成Big5編碼的List

3-6

將Big5編碼的List轉換為文字

3-7

執行結果

Big5 to Unicode的情況下Big5編碼未包含A~Z的對照(僅有全形)所以若要處理英文內容須額外處理

*參考網站 https://www.cns11643.gov.tw/wordView.jsp?ID=532822 

Unicode to Big5的情況下,若來源內容包有非常用字會無法顯示(這邊將處理為?做顯示)需有額外的對應碼表

*參考網站https://www.cns11643.gov.tw/wordView.jsp?ID=210038

*堃為big5E編碼,而標準big5編碼不包含所以無法對照

結論

透過以上方式,簡易的實作中文轉碼,可能會遇到的情況

   1.僅以標準字做對照,若有包含造字的編碼需額外處理

   2.在少量文字的情況下可以透過上方的方式作處理,但在大量轉碼時,效能可能是需要加入考慮的條件。以上是作為方向之一。

 

4. 參考來源

https://www.cns11643.gov.tw/index.jsp

https://data.gov.tw/dataset/5961

張凱欽Jimmy chang