- 追加された行はこの色です。
- 削除された行はこの色です。
*趣旨 [#u947d3f9]
文字化けした場合のJavaのTipsをまとめる
*基本 [#fd0a8414]
javaの実行時のコマンド引数に
-Dfile.encoding=UTF-8
を入れ忘れると文字化けになる場合がある。(MS932で出力される場合が多い)
*引数を手当たり次第に変換させてみる。 [#sbcb0847]
**コード [#i92c692d]
総当たりで、出力させて、理解できる組合せを探すのに使います。
これでもわからない場合の対策は下記に書きます。
/**
*
* @param value
*/
public static void printMulti(String value){
ArrayList<String> list = new ArrayList<String>();
list.add("UTF-8");
list.add("Shift_JIS");
list.add("EUC_JP");
list.add("ISO-2022-JP");
list.add("Windows-31J");
list.add("MS932");
list.add("UNICODE");
list.add("UTF16");
for (int i = 0; i < list.size(); i++) {
String item1 = list.get(i);
for (int j = 0; j < list.size(); j++) {
String item2 = list.get(j);
try {
System.out.println("["+ item1 +"][" + item2 + "]" +new String(value.getBytes(item1),item2));
} catch (UnsupportedEncodingException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
}
}
}
}
*InputStreamReaderで受け取るコードを指定する [#nd371bfa]
上記の総当たりでうまくいかなかったら、InputStreamReaderの"MS932"の指定が足りないのでは?と疑ってみます。
このしていは、JavaのProcessBuilerでシェルをWindows上で実行したときに必要になった対応です。
BufferedReader br = new BufferedReader(new InputStreamReader(is,"MS932"));