2

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

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

谢谢

4

2 回答 2

3

尝试

BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));
于 2011-12-11T07:55:33.673 回答
0

三个月前,我被卷入了同样的问题,迈克。它看起来确实像,我会假设你的问题是一样的。让我回忆一下,放在这里。如果我错过了什么,请随时添加。

我的设置是 Tomcat 和 struts。我解决它的方法是通过 Tomcat 中的正确配置。基本上它本身必须支持 UTF-8 字符。连接器中的 useBodyEncodingForURI。这是 GET 参数

另外,您可以对 POST 参数使用过滤器。一个很好的资源,你可以在一个屋顶上找到所有这些,点击这里

之后我在生产中遇到了问题,我有 apache 网络服务器将请求重定向到 tomcat :)。同样也必须在那里启用 UTF-8。故事的寓意解决了问题:)

于 2011-12-11T09:05:01.683 回答