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()至少使用了一次,可能两次(您非常长的行很难阅读;使用多个语句会更容易理解)。这没有指定编码,因此它将使用平台默认编码。在这一点上,你有一个平台依赖......因此问题。

完全不清楚您要达到什么目标,但如果您正在寻找特定平台行为的原因,那是首先要考虑的事情。

哦,创建一个PrintStream类似的东西也会有同样的问题……OutputStreamWriter而是使用特定的编码创建一个。

于 2011-11-18T13:28:46.050 回答