我正在通过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编码的?!
答案 0 :(得分:0)
使用此constructor代替InputStreamReader
:
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));
并将此constructor用于OutputStreamWriter
:
OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream(), "UTF-8"));
希望这能解决你的问题!