【问题标题】:Java HTTP/XML-request with special characters带有特殊字符的 Java HTTP/XML 请求
【发布时间】:2012-06-04 11:43:11
【问题描述】:

我正在通过 Java servlet 设置对 Google 地理编码 API 的 HTTP 请求。不幸的是,每次此请求包含特殊字符(例如“ß”)时,该请求都会返回“错误请求 / 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 编码的?!

【问题讨论】:

    标签: java xml http


    【解决方案1】:

    使用 constructor 代替 InputStreamReader

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

    也可以用这个constructor 代替OutputStreamWriter

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

    希望这能解决您的问题!

    【讨论】:

    • 谢谢。可悲的是,请求仍然以“400”响应失败。顺便说一句,通过浏览器直接输入请求(带有未转义的特殊字符)会得到正确的结果。
    • 你能给我一个stringToReverse的例子吗?你正在写信给outputStream
    猜你喜欢
    • 2017-10-24
    • 2019-10-08
    • 1970-01-01
    • 1970-01-01
    • 2015-05-28
    • 1970-01-01
    • 2015-02-25
    • 2011-08-21
    • 1970-01-01
    相关资源
    最近更新 更多