デフォルト文字コードのファイルI/Oから明示的なStandardCharsetsへ
プラットフォームのデフォルト文字コードの挙動や文字コード名の検索に頼るのではなく、StandardCharsets定数を使ったFilesのリーダーとライターを使用する。
コード比較
✕ Platform-default charset
try (Reader reader = new FileReader(path.toFile())) {
return readAll(reader);
}
✓ Explicit standard charset
try (BufferedReader reader = Files.newBufferedReader(
path, StandardCharsets.UTF_8)) {
return readAll(reader);
}
このコードに問題がありますか? お知らせください。
モダンな方法が優れている理由
移植性のある結果
同じバイト列がどのマシンでも同一にデコードされます。
定義済み定数
StandardCharsets.UTF_8には文字コード名のスペルミスが入り込みません。
モダンなファイルAPI
Path、バッファリング、エンコーディングが1つの操作で表現されます。
旧来のアプローチ
プラットフォームのデフォルト文字コード
モダンなアプローチ
明示的な標準文字コード
JDKバージョン
7
難易度
初級
JDKサポート
デフォルト文字コードのファイルI/Oから明示的なStandardCharsetsへ
利用可能
JDK 7(2011年7月)以降、広く利用可能
仕組み
デフォルト文字コードに依存するReaderおよびWriterのコンストラクタは、ファイルの挙動を実行環境に依存させます。Files.newBufferedReader()とnewBufferedWriter()は明示的なCharsetを受け取ることができ、StandardCharsetsは文字列検索やUnsupportedCharsetExceptionなしでUTF_8のような保証された定数を提供します。
関連ドキュメント
証明