2

以下はLinuxマシンでは機能しません。

        Charset charset = Charset.forName("UTF-8");
        CharsetDecoder decoder = charset.newDecoder();

        try {
            FileOutputStream fo = new FileOutputStream("hi.txt");
            PrintStream ps = new PrintStream(fo);
            String msgBody = "ΣYMMETOXH";
            ps.println(decoder.decode(ByteBuffer.wrap(decoder.decode(ByteBuffer.wrap(msgBody.getBytes())).toString().getBytes())));
            ps.close();
            fo.close();
        } catch (CharacterCodingException e) {
            e.printStackTrace();
        }

このコードはWindowsで機能します。何が問題になる可能性がありますか?Linuxマシンでは、デコーダーは文字列をデコードしません。

4

1 に答える 1

3

問題は、String.getBytes()少なくとも 1 回、場合によっては 2 回使用していることです (非常に長い行は読みにくいため、複数のステートメントを使用すると理解しやすくなります)。これはエンコーディングを指定しないため、プラットフォームのデフォルトのエンコーディングが使用されます。その時点で、プラットフォームの依存関係が発生しています...したがって問題です。

何を達成しようとしているのかはまったく明確ではありませんが、プラットフォーム固有の動作の理由を探している場合は、最初に確認する必要があります。

ああ、そのPrintStreamようなものを作成すると同じ問題が発生します...OutputStreamWriter代わりに特定のエンコーディングで を作成してください。

于 2011-11-18T13:28:46.050 に答える