我有一个zip文件,其中包含一些文件。文件中包含中文字符,所以我使用了
ZipInputStream zipStream = new ZipInputStream(
new BufferedInputStream(new FileInputStream(zipFilePath), BUFFER_SIZE),
Charset.forName("ISO-8859-1")
);
......
FileOutputStream fileOutput = new FileOutputStream(uncompressedFileName);
while (zipStream.available() > 0) {
fileOutput.write(zipStream.read());
}
提取成功运行。之后,我想使用encodingDetect方法查找编码,但现在服务未运行。它返回nomatch。如果我直接将文件发送到服务,则该服务正在运行。它可以正确找到字符集,如UTF-8。
我想Charset.forName("ISO-8859-1")
提取了文件,但是格式已损坏。您有任何想法吗?
答案 0 :(得分:1)
ISO-8859-1字符集绝对不支持中文。使用UTF-8代替ISO-8859-1
答案 1 :(得分:1)
问题是zip中文件名的字符集。 UTF-8会引发错误(文件名显然不在UTF-8中),因为UTF-8要求将多字节序列用作特殊格式,并且显然存在错误的“多字节”序列。
ISO-8859-1是一个单字节,表示接受垃圾。
您应该尝试尝试少量的Chinese Charsets,以便正确填写文件名字符串。 Java String包含Unicode,因此可以容纳任何字符集。会说中文的人的帮助可能是有道理的。
然后尝试使用这些名称编写文件。如果在PC上无法成功执行,则必须使用人工文件名,例如transliteration from Chinese。
可以创建从原始中文文件名到实际文件名的转换表 作为UTF-8文本文件,可能在文件的开头带有BOM表'\ uFEFF`。