【问题标题】:Unzip unicode filename error in Android在Android中解压unicode文件名错误
【发布时间】:2011-10-13 18:24:17
【问题描述】:

我有一个 zip 文件,其中包含一个文件:“Indulás elő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());
}

错误信息是:“Input at 5 does not match UTF8 specifitcion”

后来我尝试了另一种模式:

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);
}

但显示了这个:

Image

解决办法是什么???

文本中包含以下字母:

链接#1:http://en.wikipedia.org/wiki/%C3%81

链接#2:http://en.wikipedia.org/wiki/%C5%90#Hungarian

【问题讨论】:

  • 我也遇到过这样的问题。你最后如何解决这个问题?
  • 我也有这个问题。

标签: android utf-8 zip filenames


【解决方案1】:

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

例如

ZipInputStream zis = new ZipInputStream(getResources().openRawResource(R.raw.ie), Charset.forName("Cp437"));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-08
    • 2020-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-16
    • 1970-01-01
    相关资源
    最近更新 更多