*趣旨 [#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"));
トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS