我在将数据从Web服务加载到数据存储区时出错。问题是从Web服务返回的XML具有UTF-8字符,并且应用引擎无法正确解释它们。它将它们呈现为??。
我很确定我已将此跟踪到了网址获取请求。基本流程是:任务队列 - >获取网络服务数据 - >将数据放入数据存储区,因此它绝对与主站点的请求或响应编码无关。
我在Apache Digester之前和之后放置了日志消息,看看是不是原因,但确定不是。这就是我在日志中看到的:
来自XML的字符串:“Doppelg nger”
蒸煮器加工后:“Doppelg ?? nger”
这是我的网址抓取代码:
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。
问题仅出现在应用引擎服务器上,它在开发服务器中运行良好。
由于
答案 0 :(得分:3)
试
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));
答案 1 :(得分:0)
3个月前我被吸引到同一个问题迈克。看起来确实如此,我认为你的问题是一样的。 让我回想一下,把它放在这里。如果我错过了什么,请随意添加。
我的设置是Tomcat和struts。 而我解决它的方式是通过Tomcat中的正确配置。 基本上它必须支持那里的UTF-8字符。连接器中的useBodyEncodingForURI。这是GET参数
另外,您可以使用过滤器进行POST参数。 yu可以在一个屋檐下找到所有这些的好资源是点击here!
我之后在制作中遇到了问题,我将apache webserver重定向请求重定向到tomcat :)。同样也必须在那里启用UTF-8。故事的寓意解决了问题:)