- ベストアンサー
javaのファイル読み込み時の文字コードについて
- javaのファイル読み込み時の文字コードについて・文字コードがSJIS以外のテキストファイルをBufferdInputStreamで読み込むと文字化けする・対策方法について
- javaのファイル読み込み時の文字コードについて・テキストファイルをBufferdInputStreamで読み込み、文字化けが起きる現象について・Eclipseの実行構成やファイルの保存時の文字コード設定を変更しても解決しない場合の対策方法について
- javaのファイル読み込み時の文字コードについて・BufferdInputStreamでテキストファイルを読み込むと文字化けが起こる現象について・文字コードの引数やJISAutoDetectを指定しても解決しない場合の対策方法について
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
読み取り・書き込みに文字コードを指定しない場合、OSによってみなし文字コードが選択されます。 Windowsなら、MS932、Shift_JISみたいな。 今回はEUCということなので BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("test.txt"), "EUC-JP")); System.out.println(br.readLine()); 取り急ぎなら、こんな感じ? でも、このやり方はJava SE 1.4とか10年もののレガシーなやり方です。
その他の回答 (1)
- Ogre7077
- ベストアンサー率65% (170/258)
テキストファイルが * JIS (ISO-2022-JP) * SJIS (Windows-31j or MS932) * EUC (EUC-JP) だけなら File file = new File("EUCまたはSJISまたはJISのファイル名"); FileInputStream s = new FileInputStream(file); InputStreamReader r = new InputStreamReader(s, "JISAutoDetect"); BufferedReader br = new BufferedReader(r); String firstLine = br.readLine(); // UTF-16 に変換して読み込み System.out.println(firstLine); // DOS窓なら SJIS に変換して出力 UTF-8 なども有り得るなら、自動判別するライブラリを別途導入するのが一番かと 例: http://code.google.com/p/juniversalchardet/ ライブラリ導入が面倒なら、Java8 ならば以下で上手くいきました。 ご参考までに Path path = Paths.get("EUCまたはSJISまたはJISまたはUTF8またはUTF16のファイル名"); String[] cs = { "ISO-2022-JP", "EUC-JP", "UTF-8", "UTF-16", "MS932" }; for (String c : cs) { try { List<String> lines = Files.readAllLines(path, Charset.forName(c)); System.out.println(lines); break; } catch (IOException e) { continue; } }
お礼
早速のご回答ありがとうございます。 BufferedReaderにはSJISを指定してあります。これにより他の文字コードで書かれたINPUTのファイルが文字化けしている状態です。 説明不足で申し訳ありません。 可能であれば、INPUTのファイルがどのような文字コードで書かれていてもSJISの文字として読み取れるようにしたいのですが、難しいでしょうか?