2

我正在用 Android 中的 XmlPullParser 解析一些文件 一切都很好,除了文本上的一些特殊的 HTML 字符,如下所示:

í it should be í
é it should be é

但是我提取的字符串中缺少它们:

camión it should be camión  and I get camin 

与其他类似字符相同。

我不知道问题出在哪里,是在 xmlpullparser.getText() 上还是在 Java String 上

我该如何解决这个问题?

4

3 回答 3

1

我找到了一个解决方案,但它在应用程序大小和性能方面很昂贵,所以如果出现问题或者可以以更好的方式或更少的步骤完成,请现在告诉我。

  1. 首先从文件中获取一个字符串。伪代码:

     String content = File to string;
    

http://snippets.dzone.com/posts/show/1335

  1. 从 Apache commons 将 commons-lang3-3.1.jar 导入您的项目。为非转义 Html 字符提供该字符串:

     String output =   StringEscapeUtils.unescapeHtml4(content);
    
  2. 将该未转义的字符串提供给您的 XmlPullParser:

    xpp.setInput( new StringReader (output) );
    

就是这样。

于 2012-03-01T08:53:48.660 回答
0

就 HTML unescaping 而言,似乎有人在使用Html.fromHtmlAndroid 平台内置的 . 在应用程序大小方面,这可能是一个合适的解决方案;但是,在性能方面,您可能需要进行一些分析,因为据报道,Apache Commons 的反转义显然比 Android 内置替代方案要快得多。

于 2012-03-01T09:36:09.820 回答
0

问题是纯 XML 没有 HTML 实体。é 没有为 XML 定义。您要么必须使用 HTML 解析器(如上述建议),要么自己在 XmlPullParser 中翻译实体。

您的循环必须由 nextToken() 而不是 next() 运行;您必须回复 XmlPullParser.ENTITY_REF

当然,如果您可以更改输入文件以直接在 utf-8 或 iso-8859-1 中编码字符,而不是使用 HTML 实体,那也可以。

于 2012-03-24T01:17:23.130 回答