从Java中的ZIP存档中提取UTF-16编码的文件

时间:2010-01-25 10:07:45

标签: java zip utf-16

在代码的最后一部分中,我打印了Reader给我的内容。但它只是虚假,我哪里出错?

public static void read_impl(File file, String targetFile) {
    // Create zipfile input stream
    FileInputStream stream = new FileInputStream(file);
    ZipInputStream zipFile = new ZipInputStream(new BufferedInputStream(stream));

    // Im looking for a specific file/entry
    while (!zipFile.getNextEntry().getName().equals(targetFile)) {
        zipFile.getNextEntry();
    }

    // Next step in api requires a reader
    // The target file is a UTF-16 encoded text file
    InputStreamReader reader = new InputStreamReader(zipFile, Charset.forName("UTF-16"));

    // I cant make sense of what this print
    char buf[] = new char[1];
    while (reader.read(buf, 0, 1) != -1) {
        System.out.print(buf);
    }
}

2 个答案:

答案 0 :(得分:1)

我猜你错误的地方是相信文件是UTF-16编码的。

如果不对它们进行解码,可以显示几个初始字节值吗?

答案 1 :(得分:0)

你使用char数组有点没用,虽然乍一看它应该有效。试试这个:

int c;
while ((c = reader.read()) != -1) {
    System.out.print((char)c);
}

如果这也不起作用,那么你可能得到了错误的文件,或者文件中没有你想象的那样,或者控制台无法显示它包含的字符。