我需要使用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();
我是否需要从网络服务中更改任何内容?但是当我从浏览器中调用它时,所有字符都清楚地显示没有问题 有什么建议吗?
答案 0 :(得分:3)
也许服务器没有使用UTF-8,你的代码试图使用UTF-8来解码数据,但只有在服务器使用相同的编码时才能使用。
浏览器可以工作,因为它可能正在使用HTTP标头“Content-Encoding”,它应该指示用于数据的编码。
答案 1 :(得分:1)
请解码您的字符串回复
String dateStr = URLDecoder.decode(yourStringResponse, "utf-8");