MS932.defaultCharset()はMS932が取得できるとは限らない。

先日のエントリのフォロー。

  • ファイルの文字コードをMS932で決め打ちにしてるけど、MS932以外の文字コードのファイルでも受け付けるようにしてみてるのも面白いかも。

と書いたけど、これは間違いでした。正確には、実行環境に依存します。

MS932.defaultCharset()ではCharset.defaultCharset()が呼ばれ、実行してるOSのデフォルト文字セットを取得しています。例えばwindows環境で「IBM037.defaultCharset()」*1としても、MS932を取得します。

多分中身的には、シンプルにこんな感じなんだろうと思います。

Charset.forName(System.getProperty("file.encoding"));

該当するコードは修正しました。また一つ勉強になりました><

というわけで、念のためお知らせしておきます。>>id:syttruさん

*1:IBM037ってなんぞ?