gpt4 book ai didi

c - 用于文件名的 Minizip 和 Unicode

转载 作者:可可西里 更新时间:2023-11-01 10:44:36 30 4
gpt4 key购买 nike

我正在尝试使用 Minizip 压缩具有非 ASCII 文件名的文件.如果压缩文件名有问题的文件,即至少有一个不在 ASCII 中的字符的名称被压缩,则存档中文件的名称会被弄乱。我红How to convert minizip wrapper to unicode?并更改了源代码,以便将标志 11 设置为 true,但并没有什么不同。

举例说明问题:

文件 中文 在 zip 存档中名为 S+í¦vt

或十六进制:

\x53\x2B\xA1\xB5\xFB\xE7\x53\x2b\xed\xa6\x76\x74前两个十六进制相同但后四个不同。 \x53\x2b\xed\xa6\x76\x74window 1252

中是 S+í¦vt

程序中的文件名被硬编码为\x53\x2B\xA1\xB5\xFB\xE7(中文),以消除输入错误的风险。

文件名中仅包含 ASCII 字符的文件在 zip 存档中按应有的方式命名。由于压缩包中的文件名比原始文件名长,我假设使用了另一种编码,然后使用 UTF-8。

由于计算机中的所有符号实际上都只是二进制字符串,所以我希望一个十六进制字符串能够输出正确的文件名。这里的问题是我不知道文件名是如何在 zip 存档中编码的。

有没有人知道如何将 hex/UTF-8 转换为正确的格式以及使用哪种编码?

我认为 zip 存档使用操作系统标准编码,在我的例子中是 Windows-1252。

 const char kChineseSampleText[] = "\x53\x2B\xA1\xB5\xFB\xE7";

if ( open_file( zipF, kChineseSampleText ) )
{
//write to file
}



bool open_file( const zipFile zipFile, const char* fileName)
{
zip_fileinfo zfi;
int status = zipOpenNewFileInZip( zipFile, fileName , NULL, &zfi, NULL, 0, NULL, 0, Z_DEFLATED, Z_DEFAULT_COMPRESSION );

if( status != ZIP_OK )
{
zipClose( zipFile, NULL );
return false;
}
true;
}

最佳答案

Window 的标准压缩程序无法处理 Unicode,因此它读取二进制字符串作为 window-1252。 7-zip 解释 Unicode 中的二进制字符串!

事实证明我的程序一直有效。我唯一做的就是将标志 11 设置为 true。我没有修改任何其他内容,比如使用 wchar_t 指针而不是 char*。

关于c - 用于文件名的 Minizip 和 Unicode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31460244/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com