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

how to save a file in the correct encoding?

本文关键字:编码 保存文件      更新时间:2023-10-16

保存文件时,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"

您正在使用Post()版本,该版本将服务器的原始数据按原样写入TStreamTMemoryStream只是一个内存缓冲区,它没有字符串、字符或编码的概念。 您正在完全按照服务器发送的方式保存 HTML 文件。无论是使用 UTF-8、UTF-16、Ansi 还是其他什么。

如果要以您选择的特定编码保存文件,则必须在下载后自己转换数据。例如,通过使用返回String而不是填充TStreamPost()版本,则可以使用 TStringListTStringStringSystem::Ioutils::TFile::WriteAllText() 方法,使用特定TEncoding(如 TEncoding::UTF8)将String保存到文件中。

或者,如果服务器支持,则可以使用 TIdHTTP::Request::AcceptCharSet 属性指定愿意从服务器接受的字符集,然后服务器可以相应地对其响应进行编码。然后,您可以继续使用上面显示的原始代码。