ZipArchive 使用什么编码在创建的存档中存储文件名?
我正在使用 php ZipArchive 类来生成 zip 存档。我使用 addFile 方法的第二个参数来设置存档中文件的名称(因为磁盘上的真实文件具有不同的名称)。某些名称必须包含法语口音(例如 é)。当我下载存档时,文件名中的重音符号未正确显示。文件名应该使用什么编码? (应用程序使用UTF-8)
I'm using the php ZipArchive class in order to generate a zip archive. I use the second parameter of the addFile method in order to set the name of the file in the archive (since the real file on disk has a different name). Some of the names must contain french accents (such as é). When I download the archive, the accents aren't correctly displayed in the file name. What encoding should I use for the file names ? (the application uses UTF-8)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
这是 php bug #53948,请参阅官方错误报告。
建议的解决方法(对我有用):
It is php bug #53948, see official bug report.
Suggested workaround (worked for me):
使用DOS编码。我的文件名包含西里尔字符,因此在将文件名传递给
$zip 后,我将文件名从 cp1251
(Windows) 编码为cp866
(DOS) ->addFile()。编辑2024-02-20:这是我正在做的事情,将包含西里尔字符的UTF-8转换为Linux上的DOS图表。
Use DOS encoding. My file names has cyrillic characters, so I'm encoding the file names from
cp1251
(Windows) tocp866
(DOS), upon passing the filename to$zip->addFile()
.EDIT 2024-02-20: here is what I'm doing to convert UTF-8 that contain Cyrillic characters into DOS chartable on Linux.
Zip 文件没有指定的编码;归档工具必须猜测(或假设)所使用的编码。首先尝试 CP1252,然后从那里开始。
Zip files don't have a specified encoding; the archive tool must guess (or assume) the encoding used. Try CP1252 first, then go from there.
取决于Windows系统,例如法语,Windows内部zip使用
IBM850
作为编码。Depends on the Windows system e.g French, internal zip of Windows use
IBM850
as encoding.