我在将数据从 Web 服务加载到数据存储区时出错。问题是从 Web 服务返回的 XML 包含 UTF-8 字符,并且应用引擎无法正确解释它们。它将它们呈现为??。
我很确定我已经将此追溯到 URL Fetch 请求。基本流程是:任务队列 -> 获取 Web 服务数据 -> 将数据放入数据存储区,因此它绝对与主站点的请求或响应编码无关。
我在 Apache Digester 之前和之后放置了日志消息,看看这是否是原因,但确定不是。这是我在日志中看到的:
来自 XML 的字符串:“Doppelg��nger”
蒸煮处理后:“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。
该问题仅在应用引擎服务器上,它在开发服务器中运行良好。
谢谢