0

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に設定する必要があると思いますか?!

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 に答える