Java 应用程序引擎Url请求utf-8字符变为'';还是'';

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” 以

我在将数据从web服务加载到数据存储时出错。问题在于,从web服务返回的XML具有UTF-8字符,而应用程序引擎无法正确解释这些字符。它将它们呈现为

我相当肯定我已经追踪到了URL获取请求。基本流程是:任务队列->获取web服务数据->将数据放入数据存储,因此它肯定与主站点的请求或响应编码无关

我将日志消息放在Apache Digester之前和之后,以查看这是否是原因,但确定不是。这是我在日志中看到的:

XML中的字符串:“Doppelg��"

消化池处理后:“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;
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。故事的寓意是解决问题:)