使用juniversalchardet解決讀檔中文亂碼問題
前言
Java8讀檔遇到編碼不符的檔案會產生MalformedInputException,是因為Java預設使用系統編碼來讀取檔案,使用juniversalchardet取得正確的encoding,讀檔時指定符合的編碼格式以解決中文編碼問題。
一、測試不指定編碼直接讀取文檔
先準備2種編碼檔案以Files.readAllLines()讀取內容
demo-UTF-8.csv(encoding=UTF-8)
demo-BIG5.csv(encoding=BIG5)
測試讀取demo-UTF-8.csv
執行結果:
測試讀取demo-BIG5.csv
執行結果:
因為系統環境編碼為UTF-8,以UTF-8編碼去讀取BIG5的檔案讀取檔案內容會失敗
二、讀取文檔時指定正確編碼
Files.readAllLines()可傳入第2個參數指定文件編碼 Charset.forName("BIG5")
執行結果:
三、使用juniversalchardet取得正確的encoding
juniversalchardet是universalchardet的Java版本。
源碼:https://github.com/albfernandez/juniversalchardet
使用UniversalDetector.detectCharset()取得檔案的編碼類型
執行結果:
配合Charset.forName()以正確的編碼讀取檔案
執行結果:
參考來源:
https://github.com/albfernandez/juniversalchardet
https://www.itdaan.com/tw/70a6717747495a27735bf89432639a3f
https://kknews.cc/zh-tw/code/l69x8vz.html