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

I found a solution but it's expensive in terms of app size and performance so please let me now if something is wrong or could be done a better way or less steps.

  1. first get a String from the file. pseudo code:

     String content = File to string;
    

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

  1. Import commons-lang3-3.1.jar to your project from Apache commons. Feed that string for unescape Html characters:

     String output =   StringEscapeUtils.unescapeHtml4(content);
    
  2. Feed that unescaped string to your XmlPullParser:

    xpp.setInput( new StringReader (output) );
    

And that's it.

于 2012-03-01T08:53:48.660 に答える
0

HTMLのエスケープ解除に関する限り、誰かがHtml.fromHtmlAndroidプラットフォームに組み込まれているを使用していたようです。アプリケーションのサイズに関しては、これは適切な解決策になる可能性があります。ただし、パフォーマンスに関しては、少しプロファイリングが必要になる場合があります。これは、Apache Commonsのエスケープ解除が、Androidの組み込みの代替手段よりもはるかに高速であると報告されているためです。

于 2012-03-01T09:36:09.820 に答える
0

問題は、プレーンな XML には HTML エンティティがないことです。é は XML に対して定義されていません。(上記の提案のように) HTML パーサーを使用するか、XmlPullParser でエンティティを自分で変換する必要があります。

ループは next() ではなく nextToken() で実行する必要があります。XmlPullParser.ENTITY_REF に応答する必要があります

もちろん、入力ファイルを変更して、HTML エンティティを使用する代わりに utf-8 または iso-8859-1 で文字を直接エンコードできる場合は、それも機能します。

于 2012-03-24T01:17:23.130 に答える