当前位置: 首页 > 面试题库 >

在zip存档中使用Unicode字符作为文件名

归鸿朗
2023-03-14
问题内容

我将包含诸如 PéréquationLES HOPITAUX NEUFS.xls之 类的特殊字符 压缩 到另一个文件夹中,例如
temp

我可以压缩文件,但是问题是文件名自动更改为 P +¬r+¬报价LES HOPITAUX NEUFS.xls

如何在zip归档文件中支持Unicode字符作为文件名?


问题答案:

这一点取决于您用于创建存档的代码。在 的Java压缩类不是很灵活,因为你需要。

您可以使用Apache Commons
Compress
。迈克尔·西蒙斯(Michael Simons)编写了这段漂亮的代码:

ZipArchiveOutputStream ostream = ...; // Your initialization code here
ostream.setEncoding("Cp437"); // This should handle your "special" characters
ostream.setFallbackToUTF8(true); // For "unknown" characters!
ostream.setUseLanguageEncodingFlag(true);                               
ostream.setCreateUnicodeExtraFields(
    ZipArchiveOutputStream.UnicodeExtraFieldPolicy.NOT_ENCODEABLE);

如果您使用的是Java 7,
则最终Charset在ZipOutputStream构造函数上有一个参数(可以是UTF-8)

无论如何,最大的问题是,许多实现都不理解Unicode编码,因为 原始的
ZIP文件格式是ASCII,并且没有Unicode的正式标准。



 类似资料:
  • 问题内容: 我的用例要求我打开一个txt文件,例如abc.txt,该文件位于zip归档文件中,该归档文件包含以下格式的键值对: key1 = value1 key2 = value2 ..依此类推,每个键值对都位于新行中。我必须更改与某个键对应的一个值,然后将文本文件放回存档的新副本中。如何在Java中执行此操作? 到目前为止,我的尝试: 问题答案: 您几乎完全正确。一种可能的原因,该文件显示为已

  • 问题内容: 我有一个zip存档,其中包含一堆纯文本文件。我想解析每个文本文件的数据。到目前为止,这是我写的内容: 我需要一个RandomAccessFile来做到这一点吗?我在拥有ZipInputStream的地方迷路了。 问题答案: 不,您不需要。首先获取此zip文件条目的数据: 然后将其包装为(从二进制解码为文本)和a (一次读取一行): 然后像往常一样从中读取行。像往常一样将所有适当的位包装

  • 我一直在尝试读取ZIP存档中的PHP文件。我编写了以下代码,它可以读取文本文档和回显而没有错误,但当我用PHP文件测试时,什么都没有出现。那么我可以做些什么来读取PHP文件而不提取呢? 提前感谢!

  • 好的,我正在运行Java6(应用程序需求),我需要以unicode格式保存一个文件(没有大endian或低endian),只有双字节unicode。我是这么做的:

  • 问题内容: 我试过了 它回答: 如何以unicode而不是as形式打开文本文件? 问题答案: 编辑 对于Python 3,使用作为这个答案介绍是最好的选择。以下答案对于2.x可能仍然有用。我认为即使对于3.x,下面的任何内容实际上都不正确,但仍然更好。 如果文件是utf-8,则可以使用: 如果您要遍历可以使用的文件,则无法使用。 请注意,这两种方法对于多字节编码都不一定是安全的。例如,小尾数UTF

  • 非常简单的代码: null null 一些调查: 在调试到file.createNewFile方法之后,我发现本机方法java.io.unixFileSystem.CreateFileTracitional调用string.getBytes方法,参数为charsetName=ansi_x3.4-1968。在我通过file.encoding和sun.jnu.encoding重新定义它们之前,这种编码