如果你安裝英文版的 Windows, 而且使用 JDK 1.5 建立 Java 應用程式, 你將會發現程式中所有的中文輸出, 都會因為你是英文 Windows 而錯誤轉碼形成亂碼.
例如:
// in Main.java
javax.swing.JOptionPane.showMessageDialog(null,"測試");
用
"c:\Program Files\Java\jdk1.5.0_15\bin\javac" Main.java
執行結果, 會變成下面這樣.
這是因為你的 java 原始程式中, 有非 Unicode 字元 "測試", 在 javac 進行轉碼時使用了錯誤的轉碼表所造成的.
在這篇文章中, 我提了三種解決方法:
解決方法 1: 告訴 javac 在 source code 裡遇到非 Unicode 字元時, 用 Regional Options 的設定轉換.
這時請到 [Control Panel] -> [Regional and Language Options] 選項中, 確定一下將 Regional Options 是否為 Chinese (Taiwan).
把 United States 改成 Chinese (Taiwan)
這樣就能解決大部分的問題了. (尤其當你使用 JBuilder 建立專案)
解決方法 2: 告訴 javac 在 source code 裡遇到 非 Unicode 字元時, 請用 Big5 解釋.
作法如下:
"c:\Program Files\Java\jdk1.5.0_15\bin\javac" -encoding Big5 Main.java
執行結果:
所以, 如果你在英文版作業系統下, 編譯 java 時遇到亂碼可以用這樣的方式解決.
徹底解決方案: 在原始程式中, 使用 Unicode 表示你的字元
這樣根本不用指定編碼轉換, 一定會正確顯示你要的文字.
JOptionPane.showMessageDialog(null,"\u6e2c\u8a66","Unicode escape sequences",JOptionPane.PLAIN_MESSAGE);
至於如何得知 "測試" = \u6e2c\u8a66呢? java 提供 native2ascii 幫你批次處理轉換. (請搭配 ResourceBundle class 幫你載入轉換好的字串)
如果不想那麼麻煩, 你也可以用 Notepad 將中文存成 Unicode 格式, 然後用 UltraEditor 看一下編碼, 然後填進去\uNNNN 格式也可以.
如果你的程式有可能發行到印度或日本, 那應該使用這個方法, 進行多國語言程式的開發. 請翻譯社把字串翻譯成天城文或日文, 然後將輸出字串用統一用 ResourceBundle class 進行管理.
下面是一個簡單的範例
Main.java
make_with_encoding
make_without_encoding
自己, 試試看吧. ^_^
by Jing
我用的是英文版的vista你說的路徑我都找不到!!!
回覆刪除請稍微具體描述一下你的問題
回覆刪除哪一個路徑呢?
這個路徑
回覆刪除c:\Program Files\Java\jdk1.5.0_15\bin\javac" Main.java
這個路徑
回覆刪除"c:\Program Files\Java\jdk1.5.0_15\bin\javac" Main.java
而且我的java版本是version 6
恩. 那麼這個目錄應該是你的 javac.exe 的完整目錄.
回覆刪除