2016-04-24 108 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