文字コードを気にするときは、FileReader/FileWriterを使ってはいけないという話。
この場合、新しいものは文字化けする。
File file = new File("file_0"); BufferedReader b = new BufferedReader(new FileReader(file)); File file_w = new File("file_0_output"); FileWriter fw = new FileWriter(file_w); String s; while((s = b.readLine())!=null){ fw.write(s+"\n"); } fw.close();
文字コードを指定すると問題ない。
File file_w3 = new File("file_1"); BufferedReader b_reader = new BufferedReader(new InputStreamReader(new FileInputStream(file),"UTF-8")); PrintWriter p_writer = new PrintWriter(new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file_w3),"UTF-8"))); String s; while((s = b_reader.readLine())!=null){ p_writer.println(s); } p_writer.close();
これをSAXReaderにも応用する
dom4jのSAXReaderでUTF8の日本語XMLを読み込むとどうしても内部で文字化けしてるのかXMLをreadするときに例外が発生してた。
SAXReader reader = new SAXReader(false); reader.read(new File("C:\User\itoh\foo.xml")); // ここで例外発生
でエラー見てみると、タグ閉じができてないってそんなわけは無くって。。。。UTF8なんだけど、普通にFileReader使うと文字壊しちゃうのね。
そこで、上記のことを参考に、File(もしくは、Reader)を引数にすると文字コードが指定できないと思い、InputStreamReaderを使ってみるとうまく行った。
InputStreamReader ir = new InputStreamReader(new FileInputStream(file),"UTF-8"); document = reader.read(ir);
この2行を得たのが今日のお仕事。