TZipFile 读取 UTF8

TZipFile read UTF8

我正在尝试从 zip 文件中提取 (UTF-8) 文本文件:

TZipFile *zFile = new TZipFile;
zFile->Open(L"C:\test.zip", zmRead);

TByteDynArray bda;
zFile->Read(L"test.txt", bda);
zFile->Close();

ShowMessage(WideStringOf(bda));

这行不通。我得到一个字符串,但内容很奇怪。

如果我使用 zFile->Extract() 它工作正常,但我不想使用磁盘(性能)。

有没有办法在 UTF-8 文件上使用读取功能?

问题不在于 TZipFile 本身,真正的问题实际上在于 WideStringOf()

TZipFile::Read() returns 指定归档文件的 raw 字节(如果需要解压),所以你的 bda 变量是一个 UTF -8 编码字节数组。但是,WideStringOf() 需要一个编码为 UTF-16LE 的字节数组。这就是您看到错误结果的原因。

要将字节数组解码为 UTF-8,请改用:

ShowMessage(TEncoding::UTF8->GetString(bda));