public String getWeatherJson(InputStream is) {
StringBuilder builder = new StringBuilder();
InputStream is = null;
try {
byte[] b = new byte[2048];
for (int n; (n = is.read(b)) != -1;) {
builder.append(new String(b, 0, n, "UTF-8"));
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return builder.toString();
}
输出存在乱码,但是只是一两个字符乱码。但是通过上述方法如果复制文件的话正常。。
改成了如下方法,显示正常:
public static String fromIputStreamToString(InputStream is){
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int i = -1;
try {
while ((i = is.read()) != -1) {
baos.write(i);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return baos.toString();
}
一次读取2048个字节会造成中文字符的截断。第一个字节和最后一个字节都有可能是不完整的。
在每次2048个字节读完以后你不能保证这些字节就是刚刚好几个中文字符可能把后面一个中文字符给拆开来了,这样在用new String(b, 0, n, "UTF-8")转成string就会出现乱码了。后面一个是把所有的字节都读完了在同一装换就不会出现字符被拆的现象。