【问题标题】:encode œ correctly with UTF-8 - java编码——正确使用 UTF-8 - java
【发布时间】:2018-10-25 00:43:32
【问题描述】:

我在将以下字符串正确写入文件时遇到问题。尤其是“-”字。问题出现在我的本地计算机 (Windows 7) 和服务器 (Linux) 上

字符串:“Cœurs d'artichauts Grillées”

  1. 有效 (œ gets displays correctly, while the apostrophe get translated into a question mark):

    Files.write(path, content.getBytes(StandardCharsets.ISO_8859_1));
    
  2. 不起作用(result in file):

    Files.write(path, content.getBytes(StandardCharsets.UTF_8));
    

根据this question 的第一个答案,UTF-8 应该也能够正确编码–。有谁知道我做错了什么?

【问题讨论】:

  • 如果第一种方法“有效”,您似乎不需要 UTF-8。因为那个写的是 ISO-8859-1。你确定你用来显示输出的东西真的需要 UTF-8 吗?
  • 您的字符串content 也可能已经损坏。如果是字符串文字,您的 Java 源文件编码是什么?它必须与您的编辑认为的相符。
  • @Thilo 发现问题。绳子提前断了。断弦:“Curs d'artichauts Grillées” 应该是什么样子:“Cœurs d'artichauts Grillées” 编辑:这里也没有显示断弦。

标签: java encoding utf-8 character-encoding iso-8859-1


【解决方案1】:

你的第二种方法有效

String content = "Cœurs d’artichauts grillées";
Path path = Paths.get("out.txt");
Files.write(path, content.getBytes(Charset.forName("UTF-8")));

正在生成一个out.txt 文件:

Cœurs d’artichauts grillées

您使用的编辑器很可能没有正确显示内容。您可能必须强制您的编辑器使用 UTF-8 编码和显示 – 和其他 UTF-8 字符的字体。 Notepad++ 或 IntelliJ IDEA 开箱即用。

【讨论】:

  • 不要忘记字节顺序标记 (BOM),它可以帮助您的文本编辑器/查看器自动检测字符集。见stackoverflow.com/questions/49520409/…
  • 我正在使用这两个工具,但我会检查你所说的。感谢您的快速回复。
  • @onionknight 您始终可以使用十六进制编辑器检查文件字节以查看内容的编写方式。
  • BOM 将添加为Files.write(path, ("\uFEFF" + content).getBytes(StandardCharsets.UTF_8));
  • 我的错误。 Intellij 让我认为原始字符串是正确的。我从调试模式中复制了字符串,这出人意料地奏效了。
猜你喜欢
  • 2014-04-02
  • 1970-01-01
  • 2016-04-09
  • 2016-02-01
  • 1970-01-01
  • 2014-08-02
  • 2015-03-23
  • 2011-02-28
  • 1970-01-01
相关资源
最近更新 更多