0

Android プロジェクトで JDOM を使用していますが、サーバーの応答で特定の文字セットを取得するたびに、次のエラー メッセージが表示されます。

05-04 10:08:46.277: E/PARSE: org.jdom.input.JDOMParseException: ドキュメント UTF-8 の 95 行目のエラー: 95 行目、列 5263: 閉じられていないトークン

05-04 10:08:46.277: E/エラー ハンドラー: ハンドラーが失敗しました: org.jdom.input.JDOMParseException: 行 1 のエラー: 行 1、列 0: 構文エラー

google chrome で同じクエリを実行すると、すべての XML が正常に処理され、実際にトークンが閉じられていない領域がないことがわかります。アプリケーションの開発中に何度かこの問題に遭遇しましたが、解決策は常に奇妙な ASCII 文字 (データ フィールドにコピー/貼り付けされた著作権ロゴや商標文字など) を削除することでした。これらの文字を削除するか、削除して機能を続行するにはどうすればよいですか。これは、私の解析関数の 1 つの例です。

public static boolean parseUserData(BufferedReader br) {
    SAXBuilder builder = new SAXBuilder();
    Document document = null;

    try {
        document = builder.build(br);

        /* XML Output to Logcat */
        if (document != null) {
            XMLOutputter outputter = new XMLOutputter(
                    Format.getPrettyFormat());
            String xmlString = outputter.outputString(document);
            Log.e("XML", xmlString);
        }

        Element rootNode = document.getRootElement();
        if (!rootNode.getChildren().isEmpty()) {

            // Do stuff
            return true;
        }

    } catch (Exception e) {
        GlobalsUtil.errorUtil
                .setErrorMessage("Error Parsing XML: User Data");
        Log.e(DEBUG_TAG, e.toString());
        return false;
    }
}
4

2 に答える 2

1

BufferedReaderはencoding引数を取るように構築されていますか?おそらく、UTF-8を使用するために渡すことをReaderまたはInputStreamに通知する必要があります。

于 2012-05-04T15:30:33.353 に答える
1

文字エンコーディングの問題のようにはっきりと聞こえます。ダッフィーモの評価は正しいと思います。2つコメントがありますが……。

URL を介してデータを取得する場合は、URLConnection.getContentType() を使用して文字セットを取得し (文字セットが設定されていて、文字セットが null でない場合)、URL の InputStream に InputStreamReader を設定する必要があります...

JDOM 2.0.1 を試しましたか? これは、Android で完全にテストされた最初の JDOM バージョンです... (そして、Android で唯一「サポートされている」JDOM バージョンです)。JDOM 2.0.1 には、多くのパフォーマンスの調整と、処理を高速化するメモリの最適化もあります。また、多くのバグも修正されています....私が見たところ、バグの問題に遭遇するべきではありません....

https://github.com/hunterhacker/jdom/wiki/JDOM2-Migration-Issueshttps://github.com/hunterhacker/jdom/wiki/JDOM2-and-Androidを確認してください

于 2012-05-04T16:15:50.723 に答える