Gradle Java 中文亂碼

使用juniversalchardet解決讀檔中文亂碼問題

湯菀鈺 2020/12/03 17:19:37
1348

前言

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

 

湯菀鈺