を使用してソケット経由でデータを受信する Java アプリケーションがありますInputStreamReader
。getEncoding
メソッドから「Cp1252」が報告されます。
/* java.net. */ Socket Sock = ...;
InputStreamReader is = new InputStreamReader(Sock.getInputStream());
System.out.println("Character encoding = " + is.getEncoding());
// Prints "Character encoding = Cp1252"
これは、システムがコード ページとして報告するものと必ずしも一致しません。例えば:
C:\>chcp アクティブ コード ページ: 850
アプリケーションは、バイト 0x81 を受け取る場合があります。これは、コード ページ 850 で文字 を表しますü
。プログラムはそのバイトをコード ページ 1252 で解釈しますが、この値では文字が定義されていないため、代わりに疑問符が表示されます。
アプリケーションを起動するバッチ ファイルに別のコマンド ライン オプションを追加することで、コード ページ 850 を使用しているある顧客のために、この問題を回避することができました。
java.exe -Dfile.encoding=Cp850 ...
もちろん、すべての顧客がコード ページ 850 を使用しているわけではありません。基盤となる Windows システムと互換性のあるコード ページを Java で使用するにはどうすればよいですか? 私の好みは、Javaコードをそのままにして、バッチファイルに入れることができるものです。
ENC=... java.exe -Dfile.encoding=%ENC% ...