UTF-8形式でデータを出力できません。入力ファイルから読み取っているデータに英国ポンド記号(16進C2A3)が含まれているテストケースを設定しています。Linuxで書き出すと、有効なUTF-8(C2A3)が得られます。Windowsでは、HEXA3しか入手できません。
PrintStreamを使用して、文字セットを「UTF-8」として指定してみました。運がない。最終的にDataOutputStreamを試すまで、運が悪かった他の多くのストリームを試しました。バイト配列をパラメータとする「write()」メソッドを使用しました。文字列を出力する必要があったので、「myString.getBytes( "UTF-8")」と呼びました。
私は次のようなコードになりました:
dataOutputStream.write(myString.getBytes( "UTF-8"));
これは両方のシステムで正しく機能します。Windows7およびLinux。
私はこれがなぜうまくいったのかを理解し、私の解決策が正しいと確信しようとしています。それはシステムロケールに帰着しますか?Linuxのデフォルトはen_US.utf-8です。Windowsで指定できるのは「en_US」だけでした。それで、出力ストリームが文字列からデータを取得しようとしたとき、文字列はロケールに基づいてデータを送信していましたか?