应用引擎Url请求utf-8字符变为'??'要么 '???'

时间:2011-12-11 02:54:12

标签: java google-app-engine utf-8 urlfetch

我在将数据从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。

问题仅出现在应用引擎服务器上,它在开发服务器中运行良好。

由于

2 个答案:

答案 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。故事的寓意解决了问题:)