アプリ版:「スタンプのみでお礼する」機能のリリースについて

当方プログラム初心者です。

文字コードがSJIS以外(EUCなど)のテキストファイルをBufferdInputStreamで読み込み、readline()したものをprintlnすると、この時点でファイル内の文字が文字化けします。

環境はEclipseで、実行時はUTF-8でエンコードされるようになっています。
ファイルはサクラエディタで作成し、保存時に文字コードをEUCやSJISに設定しています(デフォルトではSJISで保存される)。
ファイル内の文字列は「ABCDE123アイウエオ」が入っている前提です。

BufferedReaderにInputStreamReaderをラップし引数に読み込みたい文字コードを指定してもダメ、文字コードの引数にJISAutoDetectを指定してもダメ、Eclipseの実行構成をテキストファイルと同じ文字コードにしてもダメでした。

取り急ぎで本当にすみません。皆様の知恵をお貸しください。。。

A 回答 (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年もののレガシーなやり方です。
    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございます。
BufferedReaderにはSJISを指定してあります。これにより他の文字コードで書かれたINPUTのファイルが文字化けしている状態です。
説明不足で申し訳ありません。

可能であれば、INPUTのファイルがどのような文字コードで書かれていてもSJISの文字として読み取れるようにしたいのですが、難しいでしょうか?

お礼日時:2014/08/28 01:09

テキストファイルが


* 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; } }
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!