プラットフォームのデフォルトの文字エンコーディング

君自身のデフォルトの文字エンコーディングを使わせてほしいー


String hage = "ほげ";
byte piyo = hoge.getBytes();// javaの文字エンコーディング
piyo = hoge.getBytes("Platform-Default"); // プラットホームのデフォルトの(略

というのが個人的理想なのですが、

String hage = "ほげ";
byte piyo = hoge.getBytes();// プラットホームのデフォルトの(略

こっちが現実です。
LinuxとWindowsでエンコーディングが異なるため、入出力重視だとプログラム自体の動作がプラットホーム依存になります。
問題なのは同じバイトコードで、ある環境下では全てOKになるテストが、別の環境だとNGになる要素を持っていることです。環境変数によって動作が変わるメソッドを使っているから当然だと言われるとそうですが、デフォルト引数がそうなっているということはそこへ誘導されているということが感覚的に分るので、それをつい使ってしまいます。

String hage = "ほげ";
byte[] piyo = hoge.getBytes("UTF-16");// ここをきっちり決める

なので、こうするようになって、変換しまくりで、間違えたり、書き忘れたらアウト。

起動時に、


$ java -Dfile.encoding=UTF-8 -jar hoge.jar

てのが正解なのかもしれないですが、Appletだと使えないですし、System.setPropertyで変更できると思いきや、無効でした。



簡単に解説すると、マニュアルをよく読んでいなくて、AppletからLinuxで動いているサーバ(java)へ日本語文字列を詰めたUDPパケットを送って、それを別のアプレットへ転送してみると、転送先でいつの間にか文字化けしていた逆恨みです!!