我正在尝试从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函数?
答案 0 :(得分:1)
问题不在TZipFile
本身,实际问题实际上是WideStringOf()
。
TZipFile::Read()
返回指定归档文件的 raw 字节(如果需要,可以解压缩),因此bda
变量是UTF-8编码的字节数组。但是,WideStringOf()
需要一个编码为UTF-16LE的字节数组。这就是为什么你看到不正确的结果。
要将字节数组解码为UTF-8,请改为使用:
ShowMessage(TEncoding::UTF8->GetString(bda));