MVPArms
MVPArms copied to clipboard
gzip解码中文字符出现乱码
Environment
- [x] MVPArms Version: 2.5.2
- [x] AndroidStudio Version: 3.5.3
Bug Description:
ZipHelper#decompressForGzip while ((bytesRead = gis.read(data)) != -1) { string.append(new String(data, 0, bytesRead, charsetName)); } 拼接中文时会乱码
Related Code:
if (compressed.length == 0) {
return null;
}
ByteArrayOutputStream out = new ByteArrayOutputStream();
ByteArrayInputStream in = new ByteArrayInputStream(compressed);
try {
GZIPInputStream ungzip = new GZIPInputStream(in);
byte[] buffer = new byte[256];
int n;
while ((n = ungzip.read(buffer)) >= 0) {
out.write(buffer, 0, n);
}
closeQuietly(ungzip);
return out.toString(charsetName);
} catch (IOException e) {
e.printStackTrace();
} finally {
closeQuietly(in);
closeQuietly(out);
}
return null;
替换为以下代码可修复
if (compressed.length == 0) {
return null;
}
ByteArrayOutputStream out = new ByteArrayOutputStream();
ByteArrayInputStream in = new ByteArrayInputStream(compressed);
try {
GZIPInputStream ungzip = new GZIPInputStream(in);
byte[] buffer = new byte[256];
int n;
while ((n = ungzip.read(buffer)) >= 0) {
out.write(buffer, 0, n);
}
closeQuietly(ungzip);
return out.toString(charsetName);
} catch (IOException e) {
e.printStackTrace();
} finally {
closeQuietly(in);
closeQuietly(out);
}
return null;
Others:
兄弟你贴出来的的两段代码是一样的啊。。。
抱歉,源代码是这段
final int BUFFER_SIZE = compressed.length;
GZIPInputStream gis = null;
ByteArrayInputStream is = null;
try {
is = new ByteArrayInputStream(compressed);
gis = new GZIPInputStream(is, BUFFER_SIZE);
StringBuilder string = new StringBuilder();
byte[] data = new byte[BUFFER_SIZE];
int bytesRead;
while ((bytesRead = gis.read(data)) != -1) {
string.append(new String(data, 0, bytesRead, charsetName));
}
return string.toString();
} catch (IOException e) {
e.printStackTrace();
} finally {
closeQuietly(gis);
closeQuietly(is);
}
return null;