【发布时间】:2013-03-20 20:15:07
【问题描述】:
我有一个将 inputStream 作为条目添加到 zip 的方法:
private void addToZip(InputStream is, String filename) throws Exception {
try {
ZipEntry zipEntry = new ZipEntry(filename);
zos.putNextEntry(zipEntry);
byte[] bytes = new byte[1024];
int length;
while ((length = is.read(bytes)) >= 0) {
zos.write(bytes, 0, length);
}
zos.closeEntry();
} finally {
IOUtils.closeQuietly(is);
}
}
当文件名包含像áé这样的UTF-8字符时会出现问题...在zip文件中,它将保存为?????,当我在ubuntu 12.10中解压缩它时,它看起来像:N├бstroje而不是@987654324 @。
对于这个例子,我使用了 jdk6,但现在我也尝试了 jdk7:
zos = new ZipOutputStream(fos, Charset.forName("UTF-8"));
但没有成功。
我还尝试了 Apache Commons Zip 并设置了编码,但也没有成功。
那么我如何将这个文件名中带有 unicode 符号的文件添加到 zip 中?
【问题讨论】:
-
前段时间我也遇到过同样的问题。我使用了特定于本地语言 (Cp866) 的非 Unicode 字符集。而且效果很好。
-
所以我应该将条目保存为 Nastroje 而不是 Nástroje ?这是最后一个选项......你如何转换它?
-
该应用程序旨在在 Windows 系统中运行。我使用
Cp866编码来支持 zip 档案中文件名中的俄语字符,并在我查看 zip 文件内容时正确查看它们。它奏效了。是否有支持您的语言符号的非 unicode 字符集?尝试使用它,而不是 utf-8。 -
是:iso-8859-2 但是当我使用它时,á 正在转换为 c
-
对不起,我不知道如何克服。