【问题标题】:The danish character not showing after convert from utf8 to iso-8859-1从 utf8 转换为 iso-8859-1 后未显示丹麦字符
【发布时间】:2015-03-31 17:53:04
【问题描述】:

我正在接收无线电流并尝试读取其元数据。它包含一些显示为的丹麦字符?标记,所以我尝试了以下转换

String s = new String(streammetadatastring.getBytes(StandardCharsets.UTF_16), StandardCharsets.ISO_8859_1);

现在它删除了 ?标记但显示错误的字符。我尝试了其他方法,但没有得到正确的值。

【问题讨论】:

  • 我也尝试了不同的字符集,但问题仍然存在

标签: java android unicode


【解决方案1】:

一行代码就像你发布的那样:

String s = new String(streammetadatastring.getBytes(StandardCharsets.UTF_16),
                          StandardCharsets.ISO_8859_1);

没有做任何有用的事情。

character encoding 是从字符到字节的映射,反之亦然。您在该行代码中所做的是使用 UTF-16 字符编码将字符串转换为字节,然后立即使用 ISO-8859-1 编码将字节转换回字符串。这不会产生任何有用的信息 - 字节包含 UTF-16 编码字符,而不是 ISO-8859-1 编码字符。

要使丹麦语字符正确显示,您必须确保无论在何处显示(命令提示符窗口?Linux shell?HTML 页面?GUI?)使用包含字符的字体,并且您指定正确的字符编码(如何做到这一点,取决于显示字符的位置)。

【讨论】:

  • 感谢您提供信息,我在 android textview 上显示它,该 textview 可以显示丹麦字符。我试过直接把字符串放在那里,这个转换是什么?标记字符只是不是正确的字符
  • 您以什么形式接收数据 - 作为来自无线电流的字节?您必须找出无线电流中使用的字符编码。然后使用该编码将字节转换为字符串:byte[] inputBytes = ...; String text = new String(inputBytes, <charset>);
  • 谢谢,你是对的,我发现读取数据的函数有问题,它读取为 Html.fromHtml(htmlresponse).toString().replace('\n', (char) 32) .replace((char) 160, (char) 32).replace((char) 65532, (char) } else { return ""; } } 有什么建议可以改变吗?
  • 在不知道数据的确切来源和处理方式的情况下,很难判断应该如何更改它。
  • 那么库的责任就是给你一个正确的 UTF-16 编码的String,它是使用正确的字符集从原始 HTML 字节内部解码的,或者给你原始的 HTML 字节然后,您可以使用 HTML 的字符集自行解码为 String
猜你喜欢
  • 1970-01-01
  • 2016-02-19
  • 2014-08-26
  • 1970-01-01
  • 2011-08-26
  • 1970-01-01
  • 1970-01-01
  • 2012-06-24
  • 1970-01-01
相关资源
最近更新 更多