【问题标题】:Android HTTPUrlConnection response returns garbageAndroid HTTPUrlConnection 响应返回垃圾
【发布时间】:2015-10-25 09:53:09
【问题描述】:

这是我的输入流标头代码

mResponseCode = connection.getResponseCode();

mError = mResponseCode != 200 && mResponseCode != 201 && mResponseCode != 202;

if (mError) {
    inputStream = connection.getErrorStream();
} else {
    inputStream = connection.getInputStream();
}
inputStreamReader = new InputStreamReader(inputStream);
bufferedReader = new BufferedReader(inputStreamReader);

String inputLine;
final StringBuilder builder = new StringBuilder();

while ((inputLine = bufferedReader.readLine()) != null)
    builder.append(inputLine);

resultStr = builder.toString();

但是字符串返回像这样的垃圾值“���������������}”

响应头包含Content-Type: application/json; charset=UTF-8所以我尝试添加

inputStreamReader = new InputStreamReader(inputStream, Charset.forName("UTF-8"));

但没有帮助。

它在邮递员上工作得很好,所以我知道服务没有问题。

有人可以提供帮助吗?

【问题讨论】:

  • 你是指返回的数据吗?
  • 你从他的响应中得到的内容编码是什么?
  • 如果你的意思是transer-encoding它的chunked并且Content-Type是application/json; charset=UTF-8
  • 是的,返回的数据!但这更像是一个编码问题。
  • @Ali 谢谢伙计。显然它被压缩了。

标签: java android httpurlconnection


【解决方案1】:

某些服务尝试借助以下标头参数压缩它们产生的数据:

Content-Encoding:SomeKindOfEncoding

要禁用此功能,请尝试设置接受编码:

connection.setRequestProperty("Accept-Encoding", "identity");

如果您想在手机上保存一些传输数据,请使用以下方法:

connection.setRequestProperty("Accept-Encoding", "gzip"); //optional forcing gzip
//...
inputStream = new GZIPInputStream(connection.getInputStream());
//rest of the code    

【讨论】:

  • 是的,对我来说它看起来像 zip。至少 OP 可以确认是否有压缩头或者这个答案是否有效
猜你喜欢
  • 1970-01-01
  • 2013-12-03
  • 2014-06-18
  • 1970-01-01
  • 2013-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-04
相关资源
最近更新 更多