如何以正确的编码保存文件?

时间:2016-03-22 10:27:42

标签: c++ c++builder

保存文件时,Unicode字符存储为字符编码

TMemoryStream *MS = new  TMemoryStream;
TStringList *list = new TStringList;
list->Add(u"call=expose_full");
IdHTTP1->Post(u"URL", list, MS);
MS->SaveToFile("1.html");

例如“Atl \ u00e9tico Rafaela Stats”

1 个答案:

答案 0 :(得分:1)

您正在使用Post()版本,将服务器的原始数据按原样写入TStreamTMemoryStream只是一个内存缓冲区,它没有字符串,字符或编码的概念。您正在保存HTML文件,就像服务器发送它一样。无论是使用UTF-8,UTF-16,Ansi等等。

如果要以您选择的特定编码保存文件,则必须在下载后自行转换数据。例如,通过使用返回Post()而非填充String的{​​{1}}版本,您可以使用TStreamTStringList,或者TStringString方法,使用System::Ioutils::TFile::WriteAllText()等特定StringTEncoding保存到文件中。

或者,如果服务器支持它,您可以使用TEncoding::UTF8属性指定您愿意从服务器接受哪个charset,然后服务器可以相应地编码其响应。然后,您可以继续使用上面显示的原始代码。