保存文件时,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”
答案 0 :(得分:1)
您正在使用Post()
版本,将服务器的原始数据按原样写入TStream
。 TMemoryStream
只是一个内存缓冲区,它没有字符串,字符或编码的概念。您正在保存HTML文件,就像服务器发送它一样。无论是使用UTF-8,UTF-16,Ansi等等。
如果要以您选择的特定编码保存文件,则必须在下载后自行转换数据。例如,通过使用返回Post()
而非填充String
的{{1}}版本,您可以使用TStream
或TStringList
,或者TStringString
方法,使用System::Ioutils::TFile::WriteAllText()
等特定String
将TEncoding
保存到文件中。
或者,如果服务器支持它,您可以使用TEncoding::UTF8
属性指定您愿意从服务器接受哪个charset,然后服务器可以相应地编码其响应。然后,您可以继续使用上面显示的原始代码。