ファイル読み書きにはエンコーディングを(絶対に)指定する
具体的には、java.ioパッケージのFileReader・FileWriterクラスは使わず、InputStreamReader・OutputStreamWriterを使うようにする。
理由は、そうしないとcharsetの指定ができないから。指定をしないとデフォルトエンコーディングが使われる。それは動作環境によって異なる。
読み書きは、デフォルトでいいと分かっている場合以外は絶対にエンコーディングを指定する。
FileInputStream fis = null; BufferedReader br = null; try { fis = new FileInputStream(file); // br = new BufferedReader(new FileReader(file)); ← こうしない! br = new BufferedReader(new InputStreamReader(fis, "UTF-8")); (略)
FileOutputStream fos = null; PrintWriter pw = null; try { fos = new FileOutputStream(file); // pw = new PrintWriter(new BufferedWriter(new FileWriter(file))); ← こうしない! pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(fos, "UTF-8"))); (略)