TZipFile读取UTF8

时间:2016-04-24 11:10:32

标签: c++ utf-8 c++builder zipfile

我正在尝试从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文件上使用read函数?

1 个答案:

答案 0 :(得分:1)

问题不在TZipFile本身,实际问题实际上是WideStringOf()

TZipFile::Read()返回指定归档文件的 raw 字节(如果需要,可以解压缩),因此bda变量是UTF-8编码的字节数组。但是,WideStringOf()需要一个编码为UTF-16LE的字节数组。这就是为什么你看到不正确的结果。

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

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