Shift_JISのテキストファイルをLinux上でJavaのプログラムで読み込んで、UTF-8で出力しようしたら文字化けしてはまった、という話。
冗長に書いた修正済みのサンプルコード
当初、FileInputStreamとInputStreamReaderを使わずにうっかりFileRaderを使用していたため、読み込み時に変な変換(UTF-8 → char(UTF-16))が働いてしまっていたというのが原因。
InputStreamReaderにShift_JISを指定すれば、Shift_JIS→char(UTF-16)に変換してくれる。
ちなみにJavaでは互換性のためにcharは16ビットのままで、UTF-16でエンコードされているらしい。(JDK1.5での情報)
http://www.ibm.com/developerworks/java/library/j-unicode/
冗長に書いた修正済みのサンプルコード
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(filename), "Shift_JIS")); while(null != (line = br.readLine())){ byte[] buf = line.getBytes("UTF-8"); // UTF-16 to UTF-8 String str = new String(buf, "UTF-8"); // UTF-8 to UTF-16 }
当初、FileInputStreamとInputStreamReaderを使わずにうっかりFileRaderを使用していたため、読み込み時に変な変換(UTF-8 → char(UTF-16))が働いてしまっていたというのが原因。
InputStreamReaderにShift_JISを指定すれば、Shift_JIS→char(UTF-16)に変換してくれる。
ちなみにJavaでは互換性のためにcharは16ビットのままで、UTF-16でエンコードされているらしい。(JDK1.5での情報)
http://www.ibm.com/developerworks/java/library/j-unicode/
※コメント投稿者のブログIDはブログ作成者のみに通知されます