2

Web サービスからデータストアにデータをロードしているときにエラーが発生しました。問題は、Web サービスから返された XML に UTF-8 文字が含まれており、アプリ エンジンがそれらを正しく解釈していないことです。それらを ?? としてレンダリングします。

これを URL Fetch リクエストまで追跡したことは間違いありません。基本的な流れは次のとおりです。タスク キュー -> Web サービス データを取得する -> データをデータストアに入れるので、メイン サイトの要求または応答のエンコーディングとはまったく関係ありません。

Apache Digester の前後にログ メッセージを置いて、それが原因かどうかを確認しましたが、そうではないと判断しました。これは私がログで見たものです:

XML からの文字列: "Doppelg��nger"

消化槽処理後:「ドッペルグ??ンガー」

ここに私のURL取得コードがあります:

public static String getUrl(String pageUrl) {
    StringBuilder data = new StringBuilder();
    log.info("Requesting: " + pageUrl);
    for(int i = 0; i < 5; i++) {
        try {
            URL url = new URL(pageUrl);
            URLConnection connection = url.openConnection();
            connection.connect();
            BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
            String line;
            while ((line = reader.readLine()) != null) {
                data.append(line);
            }
            reader.close();
            break;
        } catch (Exception e) {
            log.warn("Failed to load page: " + pageUrl, e);
        }
    }
    String resp = data.toString();
    if(resp.isEmpty()) {
        return null;
    }
    return resp;

これを強制的に入力をUTF-8として認識させる方法はありますか? 読み込んでいるページをテストしたところ、W3c バリデーターはそれを有効な utf-8 として認識しました。

この問題はアプリ エンジン サーバーでのみ発生し、開発サーバーでは問題なく動作します。

ありがとう

4

2 に答える 2

3

試す

BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));
于 2011-12-11T07:55:33.673 に答える
0

私は 3 か月前に同じ問題に引き込まれました。それは次のように見えますが、あなたの問題は同じであると思います。思い出してここに置いておきます。見落としがありましたら、遠慮なく追加してください。

私のセットアップは、Tomcat と Struts でした。そして、私がそれを解決した方法は、Tomcat で正しい構成を使用することでした。基本的に、UTF-8 文字自体をサポートする必要があります。コネクタでBodyEncodingForURIを使用します。これはGETパラメータ用です

さらに、POST パラメータにフィルタを使用できます。これらすべてを 1 つの屋根で見つけることができる優れたリソースは、ここをクリック!

その後、Apache WebサーバーがリクエストをTomcatにリダイレクトするという問題が発生しました:)。同様に、そこでも UTF-8 を有効にする必要があります。物語の教訓は、問題を解決します:)

于 2011-12-11T09:05:01.683 に答える