【问题标题】:Java: can't save in UTF-8Java:无法以 UTF-8 保存
【发布时间】:2011-07-22 08:47:50
【问题描述】:

我在java中有这行代码:

new BufferedWriter(new OutputStreamWriter(new FileOutputStream(name, append), "UTF-8"));

这个作者没有写一个 UTF-8 文件,因为当我在 notepad++ 中打开它时,它说编码是:ANSI as UTF-8。我需要它是纯 UTF-8。

你有什么建议吗?

【问题讨论】:

  • 如果你的文件只包含ASCII字符,那么就没有区别了。即以 UTF-8 或 ASCII 格式保存,文件内容将完全相同,除非您输入 BOM 字节 (0xEF,0xBB,0xBF)。
  • 我不会只按照 Notepad++ 所说的去做——你看过文件的内容了吗?

标签: java file-io utf-8 character-encoding bufferedwriter


【解决方案1】:

notepad++(和任何其他工具)只能猜测编码,它不会写在您的文件(或某些元数据)的任何地方。

如果您编写的文本不包含任何超出 ASCII 范围的字符(即没有 Unicode 代码点 > 127 的字符),那么使用 ANSI 编码的文件与使用 UTF-8 编码的文件无法区分。

【讨论】:

    【解决方案2】:

    Notepad++ 使用启发式算法来检测编码,即检测到的编码可能与真实编码不同(这是一个猜测)。

    在这种情况下,Notepad++ 是正确的,但错误地标记了编码。 ANSI as UTF-8is 纯 UTF-8,只是没有 BOM

    【讨论】:

    • misunderlabeling,真的是一个词吗? :P
    【解决方案3】:

    Notepad++ 很可能需要文件开头的 BOM。首先将字节 EF BB BF 写入文件,然后是编码字符。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-21
      • 2019-08-08
      • 1970-01-01
      相关资源
      最近更新 更多