Java サーブレットを介して Google ジオコーディング API への HTTP リクエストを設定しています。残念ながら、このリクエストに特殊文字 (「ß」など) が含まれるたびに、リクエストは「Bad request / 400」例外を返します。このサービスは、これらの奇妙なキャラクターがかなり人気があり、必要な国であるヨーロッパで使用されようとしているため、ここでは少し問題があります. リクエスト内の特殊文字を 16 進数のエスケープ文字列 (「ß」の場合は 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();
誰かがここで私を助けてくれることを願っています。Googleの応答もUTF-8でエンコードされていることを考えると、URLConnectionまたはストリームの1つをUTF-8に設定する必要があると思いますか?!