Java 应用程序引擎Url请求utf-8字符变为'';还是'';
我在将数据从web服务加载到数据存储时出错。问题在于,从web服务返回的XML具有UTF-8字符,而应用程序引擎无法正确解释这些字符。它将它们呈现为 我相当肯定我已经追踪到了URL获取请求。基本流程是:任务队列->获取web服务数据->将数据放入数据存储,因此它肯定与主站点的请求或响应编码无关 我将日志消息放在Apache Digester之前和之后,以查看这是否是原因,但确定不是。这是我在日志中看到的: XML中的字符串:“Doppelg��" 消化池处理后:“Doppelg??nger” 以下是我的url获取代码:Java 应用程序引擎Url请求utf-8字符变为'';还是'';,java,google-app-engine,utf-8,urlfetch,Java,Google App Engine,Utf 8,Urlfetch,我在将数据从web服务加载到数据存储时出错。问题在于,从web服务返回的XML具有UTF-8字符,而应用程序引擎无法正确解释这些字符。它将它们呈现为 我相当肯定我已经追踪到了URL获取请求。基本流程是:任务队列->获取web服务数据->将数据放入数据存储,因此它肯定与主站点的请求或响应编码无关 我将日志消息放在Apache Digester之前和之后,以查看这是否是原因,但确定不是。这是我在日志中看到的: XML中的字符串:“Doppelg��" 消化池处理后:“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;
publicstaticstringgeturl(stringpageurl){
StringBuilder数据=新的StringBuilder();
log.info(“请求:+pageUrl”);
对于(int i=0;i<5;i++){
试一试{
URL=新URL(页面URL);
URLConnection=url.openConnection();
connection.connect();
BufferedReader=new BufferedReader(new InputStreamReader(connection.getInputStream());
弦线;
而((line=reader.readLine())!=null){
数据。追加(行);
}
reader.close();
打破
}捕获(例外e){
log.warn(“加载页面失败:+pageUrl,e”);
}
}
String resp=data.toString();
如果(分别为isEmpty()){
返回null;
}
返回响应;
我有没有办法强迫它将输入识别为UTF-8。我测试了正在加载的页面,W3c验证程序将其识别为有效的UTF-8
这个问题只在appengine服务器上存在,在开发服务器上可以正常工作
谢谢试试看
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));
三个月前,我也被卷入了同一个问题,迈克。看起来,我认为你的问题是一样的。 让我回忆一下,把它放在这里。如果我遗漏了什么,请随意补充 我的设置是Tomcat和struts。 我解决问题的方法是通过Tomcat中的正确配置。 基本上,它本身必须支持UTF-8字符。在连接器中使用BodyEncodingForURI。这是用于GET参数的 此外,还可以对POST参数使用过滤器。 一个很好的资源,你可以找到所有这些在一个屋顶是点击 此后,我在生产中遇到了一个问题,apache Web服务器将请求重定向到tomcat:)。同样,我也必须在那里启用UTF-8。故事的寓意是解决问题:)