调用httpconnection,编码无效

时间:2017-10-13 11:01:15

标签: java android encoding httpurlconnection

我需要使用http连接调用服务获取,响应包含阿拉伯字符,但是当我使用下面的代码调用它时

 try {

        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("GET");

        InputStream in = new BufferedInputStream(conn.getInputStream());
        response = IOUtils.toString(in, "UTF-8");
    } catch (MalformedURLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (ProtocolException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

响应是

1|U|����� ������|$2|L|���� �������|$3|S|���� 

我尝试了另一种不使用Commons-io但也没有使用

的解决方案
                HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
            connection.setConnectTimeout(5000);
            connection.setRequestMethod("GET");
            connection.connect();
            int statusCode = connection.getResponseCode();
            //Log.e("statusCode", "" + statusCode);
            if (statusCode == 200) {
                sb = new StringBuilder();
                reader = new BufferedReader(new InputStreamReader(connection.getInputStream(),"UTF-8"));

                char[] tmp = new char[1024];
                int l;
                while((l = reader.read(tmp)) != -1) {
                    sb.append(tmp, 0, l);
                }
                //sb = buffer.toString();
            }

            connection.disconnect();
            if (sb != null)
                serverResponse = sb.toString();

我是否需要从网络服务中更改任何内容?但是当我从浏览器中调用它时,所有字符都清楚地显示没有问题 有什么建议吗?

2 个答案:

答案 0 :(得分:3)

也许服务器没有使用UTF-8,你的代码试图使用UTF-8来解码数据,但只有在服务器使用相同的编码时才能使用。

浏览器可以工作,因为它可能正在使用HTTP标头“Content-Encoding”,它应该指示用于数据的编码。

答案 1 :(得分:1)

请解码您的字符串回复

String dateStr = URLDecoder.decode(yourStringResponse, "utf-8");