有两种可能性:
> Java在输出文件时使用了错误的编码.
>文件实际上是正确的,无论您使用什么来显示文件都使用错误的编码.
假设问题是第一个问题,根本原因是Java已经发现平台的默认编码不是您想要/期望的编码.有三种方法可以解决这个问题:
>弄清楚为什么Java有默认的语言环境和编码“错误”并解决了这个问题.这将与您的操作系统的区域设置有关…
>有关如何在命令行覆盖默认语言环境设置的详细信息,请阅读this FAQ.
>使用明确指定编码的PrintWriter构造函数,以便应用程序不依赖于默认编码.例如:
PrintWriter pw = new PrintWriter("filename", "ISO-8859-1");
回应此评论:
Don’t PrintWriters all have the bug that you can’t know you had an error with them?
>这不是一个错误,它是一个设计功能.
>您可以查看是否有错误.你只是无法找出它是什么.
>如果你不喜欢它,你可以改用Writer.
They won’t raise an exception or even return failure if you try to shove a codepoint at them that can’t fit in the designated encoding.
我相信一个普通的作家也不会……除非你专门建造它以做到这一点.正常行为是用特定字符替换任何不可映射的代码点,尽管这在javadocs(IIRC)中没有指定.
Do they even tell if you the filesystem fills up; I seem to recall that they don’t.
那是真实的.然而:
>对于通常使用PrintWriter编写的文件类型,这不是一个关键问题.
>如果这是一个关键问题并且你仍然想要使用PrintWriter,你总是可以调用checkError()(IIRC)来查明是否有错误.
I always end up writing my out OutputStreamWriter constructor with the explicit Charset.forName(“UTF-8”).newEncoder() second argument. It’s kind of tedious, so perhaps there’s a better way.
我不知道.