我有一个zip文件,其中包含一个文件:“Induláselőtt.html” (这是匈牙利文本)
但是当我尝试解压缩时,我在getNextEntry行中遇到错误:
try {
ZipInputStream zis = newZipInputStream(getResources().openRawResource(R.raw.ie));
ZipEntry ze = null;
while ((ze = zis.getNextEntry()) != null) {
info.setText(info.getText() + "\nName: " + ze.getName());
}
} catch (Exception e) {
info.setText(info.getText() + "\nERROR: " + e.getMessage());
}
并且错误消息是:“5处的输入与UTF8规范不匹配”
后来我尝试了另一种模式:
ZipFile zipfile = new ZipFile(file);
for (Enumeration e = zipfile.entries(); e.hasMoreElements();) {
ZipEntry entry = (ZipEntry) e.nextElement();
String name = new String(entry.getName().getBytes("UTF-8"), "UTF-8");
info.setText(info.getText() + "\nName: " + name);
}
但显示了这个:
解决方案是什么?
该文字包括以下字母:
链接#1:HTTP://en.wikipedia.org/wiki/%C3%81
链接#2:HTTP://en.wikipedia.org/wiki/%C5%90#Hungarian
答案 0 :(得分:0)
zip文件的文件名字符集可能不明确。 Java 7的zip实现应该能够检测到UTF-8标志(http://docs.oracle.com/javase/7/docs/api/java/util/zip/package-summary.html#lang_encoding),但这依赖于打包应用程序正确编码文件名并设置必需的UTF-8标志。
我怀疑您的zip文件打包不正确或者没有使用UTF-8文件名。尝试传递默认的Zip字符集:Cp437
E.g。
ZipInputStream zis = new ZipInputStream(getResources().openRawResource(R.raw.ie), Charset.forName("Cp437"));