Big-5&Unicode中文轉碼
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