gpt4 book ai didi

java - ISO 8859-1 Java 程序打印文件的编码

转载 作者:搜寻专家 更新时间:2023-10-31 20:05:50 24 4
gpt4 key购买 nike

我编写了一个实现文件结构的程序,该程序根据该结构打印出一个产品文件。产品名称包括字母 Æ、Ø 和 Å。这些字母未在输出文件中正确显示。我用

PrintWriter printer = new PrintWriter(new FileOutputStream(new File("products.txt")));

IS0 8859 - 1 或 Windows ANSI (CP 1252) 是实现所需的字符集。

最佳答案

有两种可能:

  • Java 在输出文件时使用了错误的编码。
  • 该文件实际上是正确的,但您用来显示该文件的任何内容都使用了错误的编码。

假设问题是第一个,根本原因是 Java 发现平台的默认编码不是您想要/期望的编码。解决这个问题的三种方法:

  • 弄清楚 为什么 Java 的 got 默认语言环境和编码“错误”并进行补救。这将与您的操作系统的区域设置有关...

  • 阅读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.

我相信普通的 Writer 也不会……除非您专门构建它来执行此操作。正常行为是用特定字符替换任何不可映射的代码点,尽管这在 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.

我不知道。

关于java - ISO 8859-1 Java 程序打印文件的编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7341806/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com