JavaでEUCファイルの読み込みにはまった。

会社でいきなりプログラミングの課題が出された。

以下にファイルを読み込んで書き出すソースがあります。文字化けの考慮や、例外処理、その他修正できる部分があれば、正しく書き直してください。なお、import文などのヘッダー記述は不要です。

File file = new File("hoge.txt");
String content="";
BufferedReader reader = new BufferedReader(new FileReader(file));
String str;
while ((str = reader.readLine()) != null) {
    content += str;
}
reader.close();

まずお題からしてなんかイケてないんだけど(やろうと思ったらどこまでもできるし)、これの「文字化けの考慮」ではまったよ。
EUCのファイルを読み込むとどうしても文字化けする。

FileReader (Java Platform SE 6)

このクラスのコンストラクタは、デフォルトの文字エンコーディングとデフォルトの byte バッファーのサイズが適切に設定されていることを前提としています。これらの値を自分で指定するには、FileInputStream 上に InputStreamReader を構築してください。

早く言ってよ!

でもね、お題にファイルのエンコーディングって指定されていないわけ。
だから、SJISEUCもUTF8も、もっと言えばMS932とかも対応しなきゃいけないわけ。

もうね、面倒だからInputStreamReaderに"JISAutoDetect"をかましました。


ただ、JISAutoDetectって完璧じゃない。

JISAutoDetectの使いどころ - Enjoy*Study

特に「最終的に使用された文字エンコーディングが何であったのか検出できない。」っていうのがイタいね。
このお題だったら変数に書き込むまで、が目的なので、その先のWriteは意識しないからいいけど、
Writeするときに元の値がわからないと書き出しようがない。

もっとお題をちゃんとしてくれー!