Java 中文列印亂碼補救法
因為 NetBeans 某些版本設定其 Output 結果視窗接收字碼為 UTF8,故用 Java 列印中文時若出現亂碼,有兩種強迫輸出UTF8的補救法:
A. 專案層級修改 (推薦作法)
從 NetBeans 左側 Files 頁籤,找到 專案名/nbproject/project.properties 檔案,修改如下欄位值。改專案組態,所有其中程式都適用,較簡便。。
run.jvmargs=-Dstdout.encoding=UTF-8
B. 程式層級修改
請在程式首次執行列印指令之前,修改輸出串流編碼為 UTF8 。指令如下。須每支程式都作修正較麻煩。
import java.io.PrintStream;
System.setOut(new PrintStream(System.out, true, "UTF8"));
// 執行上述指令須處理 UnsupportedEncodingException 未支援編碼例外
// 可用 try-catch 結構自己處理例外,或宣告執行該指令的方法丟出(throws)該例外給上一層處理
一般而言,Java 處理編碼分成 3 階段,只有原始碼編譯及執行階段會出現亂碼,狀況如下表所示。
| 階段 (Timing) | 格式 / 載體 | 目的 | 常見問題 |
|---|---|---|---|
| 1. 原始碼編譯階段 (Source Compile) | .java 檔案 |
供開發者撰寫與閱讀 | 編譯時出現 unmappable character 錯誤 |
| 2. 類別檔階段 (Class File) | .class 檔案 |
JVM 執行指令 (Unicode) | 無 (由 Java 內部處理,具備跨平台通用性) |
| 3. 執行階段 (Execution) | Console / Output 視窗 | 供使用者查看執行結果 | 終端機出現 中文亂碼 (Garbled text) |
其中,原始碼編譯階段,由於 Windows 繁中版使用 Big5 編碼,故終端機下使用 javac.exe 編譯器若出現 unmappable character 無法映射字元錯誤,可利用如下選項,通知編譯器選用適當編碼,讀取中文:
- javac.exe -encoding big5 My.java (適用於My.java中文用Big5編碼)
- javac.exe -encoding utf8 My.java (適用於My.java中文用UTF8編碼)
執行階段,若想知道輸出串流目前編碼為何,可用如下指令診斷:
System.out.println(System.out.charset()); // 常見為 x-windows-950 (繁中Big5碼) 或 UTF-8
參考: https://stackoverflow.com/questions/53257763/netbeans-9-print-unicode-characters
沒有留言:
張貼留言