備忘録 the next generation

2014年末にOCN(http://yamagu.mo-blog.jp)からこちらに移転しました。

Windowsマシンから持ってきたファイルをJavaで読み込む

2015-06-30 15:52:59 | 日記
Shift_JISのテキストファイルをLinux上でJavaのプログラムで読み込んで、UTF-8で出力しようしたら文字化けしてはまった、という話。

冗長に書いた修正済みのサンプルコード

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/


最新の画像もっと見る

コメントを投稿