以下内容在 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 机器上解码器不会解码字符串。
最佳答案
问题是您至少使用了 String.getBytes()
一次,可能两次(您的长行很难阅读;使用多个语句会使其更容易理解)。它没有指定编码,因此它将使用平台默认编码。到那时,您就产生了平台依赖性......因此出现了问题。
目前还不清楚您想要实现什么目标,但如果您正在寻找特定于平台的行为的原因,那么这是首先要考虑的事情。
哦,创建一个像这样的 PrintStream
也会有同样的问题...创建一个具有特定编码的 OutputStreamWriter
。
关于java - CharsetDecoder 无法在 Linux 机器上工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8183093/