我编写了一个实现文件结构的程序,程序根据结构打印出一个产品文件。产品名称包括字母Æ,Ø和Å。这些字母在输出文件中无法正确显示。我用
PrintWriter printer = new PrintWriter(new FileOutputStream(new File("products.txt")));
IS0 8859 - 1或Windows ANSI(CP 1252)是实现需要的字符集。
答案 0 :(得分:5)
有两种可能性:
假设问题是第一个问题,那么根本原因是Java已经发现平台的默认编码不是您想要/期望的编码。有三种方法可以解决这个问题:
找出为什么 Java有默认的语言环境和编码“错误”并解决了这个问题。这将与您的操作系统的区域设置有关...
阅读this FAQ,了解有关如何在命令行覆盖默认语言环境设置的详细信息。
使用明确指定编码的PrintWriter
构造函数,以便您的应用程序不依赖于默认编码。例如:
PrintWriter pw = new PrintWriter("filename", "ISO-8859-1");
回应此评论:
不要PrintWriters都有你不知道你有错误的错误吗?
Writer
。如果您尝试将代码点推送到不符合指定编码的代码点,它们不会引发异常甚至返回失败。
我认为不会定期Writer
......除非你专门构建它以做到这一点。正常行为是用特定字符替换任何不可映射的代码点,尽管在javadocs(IIRC)中没有指定。
他们甚至会告诉你文件系统是否填满;我似乎记得他们没有。
这是事实。但是:
对于您通常使用PrintWriter
编写的文件类型,这不是一个关键问题。
如果这是一个关键问题并且您仍想使用PrintWriter
,则可以随时致电checkError()
(IIRC)以查明是否有错误。
我总是使用显式的Charset.forName(“UTF-8”)。newEncoder()第二个参数编写我的OutputStreamWriter构造函数。这有点乏味,所以也许有更好的方法。
我不知道。