【问题标题】:How do I remove unrecognized characters which come back from a web service?如何删除从 Web 服务返回的无法识别的字符?
【发布时间】:2010-04-16 02:45:07
【问题描述】:

我正在开发一个调用休息网络服务的应用程序。有时 xml 响应包含手机无法显示的字符。显示这些字符时,会显示一个空框。我想过滤掉这些字符。如何检测一个字符是否能够显示在屏幕上?

一些特定的字符包括:

http://www.fileformat.info/info/unicode/char/0094/index.htm http://www.fileformat.info/info/unicode/char/0080/index.htm http://www.fileformat.info/info/unicode/char/0092/index.htm

【问题讨论】:

  • 您确定这是“理解”问题(无法识别的 XML 实体)而不仅仅是“显示”问题(应用程序字体缺少某些 Unicode 代码点)吗?如果是前者,答案是在读入之前清理 XML;如果是后者,您的问题可以通过选择(或捆绑)另一种具有更多代码点的字体来解决。
  • 你能解释一下哪些字符没有正确显示吗?另外,你用的是什么字体。
  • 如果您可以发布更多信息,例如未正确显示的字符,我们可以给您一个不那么笼统的答案

标签: java xml android parsing encoding


【解决方案1】:

Android 支持以下encodings

  • Xml.Encoding ISO_8859_1
  • Xml.Encoding US_ASCII
  • Xml.Encoding UTF_16
  • Xml.Encoding UTF_8

US_ASCII 应该不会有任何问题。

对于 ISO_8859_1,您应该检查 wiki 用于控制字符 0x00-0x1f 和 0x7f-0x9f 并过滤它们。 当然还要使用匹配的字体。

使用 UTF_8 或 16 更复杂,请阅读 Joels The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets

您可能会发现此邮件list 很有用。

【讨论】:

    【解决方案2】:

    首先,尝试使用以下命令获取设备的默认字符集:

    Charset.defaultCharset();
    

    然后尝试在 XML 声明的伪属性或 HTTP 调用的 Content-Type 标头中查找 XML 的字符集。
    例如:

    <?xml version="1.0" encoding="utf-8" ?>
    

    Content-Type: text/html; charset=utf-8
    

    如果您设备的默认字符集与 XML 的字符集不同,您在处理新字符串时必须注意:

    new String( bytes);
    

    因为如果您忘记指定正确的编码,Dalvik 将使用设备的默认编码,但可能会出现显示错误。
    记得使用:

    new String( bytes, encoding);
    

    【讨论】:

      【解决方案3】:

      看来我可以在每个字符上调用Character.isIdentifierIgnorable(),如果它是可忽略的,则不包括它。 Character.isISOControl() 可能也会起作用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-05-13
        • 1970-01-01
        • 2014-08-24
        • 2011-02-12
        • 1970-01-01
        • 2015-01-09
        • 2012-03-21
        相关资源
        最近更新 更多