2016-04-24 82 views
-2

我试图从一个zip文件中提取(UTF8)文本文件:TZipFile阅读UTF8

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文件上使用读取功能?

回答

1

问题不在TZipFile本身,真正的问题其实是用WideStringOf()代替。

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

的字节数组为UTF-8进行解码,而使用这样的:

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

啊TY,即工程:) – lemara