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