how to correct garbled code when printing Chinese in NetBeans Output Window?

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

沒有留言:

quick ways to initialize a list of numbers or strings in java

Java 快速建立整數與字串清單的寫法 在 Java 中,建立 List<Integer> 與 List<String> 是非常常見的需求。 以下依照不同 JDK 版本,整理出幾種 快速建立可修改(modifiab...

總網頁瀏覽量