0

我正在通过 Java servlet 设置对 Google 地理编码 API 的 HTTP 请求。不幸的是,每次这个请求包含一个特殊字符(例如'ß'),请求都会返回一个“Bad request / 400”异常。由于这项服务即将在这些奇怪角色相当流行和必要的国家 - 欧洲 - 我在这里遇到了一些麻烦。将请求中的特殊字符替换为十六进制转义字符串('ß' 为 0xDF/%DF)会导致来自 Google 的“INVALID_REQUEST”响应。

这就是我获得 XML 响应的方式:

stringToReverse = URLEncoder.encode(url, "UTF-8");
URL urlR = new URL(url);
                URLConnection connection = urlR.openConnection();

                connection.setDoOutput(true);

                OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream());
                out.write("string=" + stringToReverse);
                out.close();

                BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
                String decodedString;
                String resultString = "";
                while ((decodedString = in.readLine()) != null) {
                    System.out.println(decodedString);
                    resultString += decodedString;
                }               
                in.close();

希望有人可以在这里帮助我。我想 URLConnection 或其中一个流需要设置为 UTF-8,考虑到 Google 的响应也是用 UTF-8 编码的?!

4

1 回答 1

0

使用此构造函数代替InputStreamReader

BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));

并将此构造函数用于OutputStreamWriter

OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream(), "UTF-8"));

希望这能解决您的问题!

于 2012-06-04T11:55:28.247 回答