【问题标题】:Uppercase accented characters displayed as “?”大写重音字符显示为“?”
【发布时间】:2015-03-11 18:41:48
【问题描述】:

我从一个以 latin1 作为排序规则的数据库表中得到一个字符串值。不过,他的文本包含 UTF-8 字符。

所以我在我的 Web 服务器逻辑 (Java) 中执行此操作来解析奇怪的字符:

 new String(latin1.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8);

现在一切正常,但大写重音字符(例如:À)仍显示为“?”。只有大写字母仍然存在问题(例如:à 现在已解决并且显示正确)。

有没有办法解决大写重音字符?

【问题讨论】:

  • 你在哪里显示字符串?控制台,日志文件?是否可以提供一个完整的字符串示例?
  • ctrl+shift+d 在 Eclipse 调试模式下直接在变量上。
  • 我在我写的测试中尝试了你的代码。我从具有 ISO 编码的文本文件中读取字符串,然后对其进行转换,它对两个字符都适用。当然它不是 100% 准确,但仍然......你可以尝试在控制台中打印变量而不是使用调试器吗?
  • 我得到了同样的结果。这是数据库中编码字符串的一部分:如果您想尝试一下,可以使用 Örphëüm。
  • 我总是得到:??rphëüm 结果。

标签: java utf-8 character decoding latin1


【解决方案1】:

好的,这可能不是最好的解决方案,但它肯定对我有用并满足了我们的需求。

问题似乎与 getBytes 方法与映射编码有关。我们只是用 byte[] 映射我们的列,以避免在 WebServer/Hibernate 端进行任何转换。

这样我们就可以调用 new String(myByteArray, StandardCharsets.UTF-8) 现在输出很好了!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-08
    • 1970-01-01
    • 2015-01-23
    • 1970-01-01
    • 2013-10-24
    • 2014-09-27
    • 2015-01-09
    相关资源
    最近更新 更多