我正在尝试从 zipFile 读取 UTF-8 文件,结果证明这是一个重大挑战。
在这里,我将字符串压缩到字节数组以保存到我的数据库。
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ZipOutputStream zo = new ZipOutputStream( bos );
zo.setLevel(9);
BufferedWriter writer = new BufferedWriter(
new OutputStreamWriter(bos, Charset.forName("utf-8"))
);
ZipEntry ze = new ZipEntry("data");
zo.putNextEntry(ze);
zo.write( s.getBytes() );
zo.close();
writer.close();
return bos.toByteArray();
这就是我读回字符串的方式:
ZipInputStream zis = new ZipInputStream( new ByteArrayInputStream(bytes) );
ZipEntry entry = zis.getNextEntry();
byte[] buffer = new byte[2048];
ByteArrayOutputStream bos = new ByteArrayOutputStream();
int size;
while ((size = zis.read(buffer, 0, buffer.length)) != -1) {
bos.write(buffer, 0, size);
}
BufferedReader r = new BufferedReader( new InputStreamReader( new ByteArrayInputStream( bos.toByteArray() ), Charset.forName("utf-8") ) );
StringBuilder b = new StringBuilder();
while (r.ready()) {
b.append( r.readLine() ).append(" ");
}
我回到这里的字符串丢失了 UTF8 字符!
更新 1: 我更改了代码,以便将原始字符串的字节数组与从 zipfile 读回的字节数组进行比较,它们非常匹配!所以这可能是我在获得字节后构建字符串的方式。
Arrays.equals(已转换,orgi)