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 として認識しました。
この問題はアプリ エンジン サーバーでのみ発生し、開発サーバーでは問題なく動作します。
ありがとう