解压缩包含汉字的文件

时间:2019-05-22 11:43:07

标签: java

我有一个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")提取了文件,但是格式已损坏。您有任何想法吗?

2 个答案:

答案 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`。