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));
我正在尝试从 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));