带有特殊字符的Java HTTP / XML请求

时间:2012-06-04 11:43:12

标签: java xml http

我正在通过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,考虑到谷歌的响应也是用UTF-8编码的?!

1 个答案:

答案 0 :(得分:0)

使用此constructor代替InputStreamReader

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

并将此constructor用于OutputStreamWriter

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

希望这能解决你的问题!