天天看点

iso-8859-1 java_ISO 8859-1用Java程序打印的文件编码

有两种可能性:

> 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.

我不知道.