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

标签 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”

最佳答案

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

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

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

关于c++ - 如何以正确的编码保存文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36151891/

相关文章:

delphi - 缺少 .bpl 文件

c++ - 结构内的函数原型(prototype) - Intellisense 找不到

c++ - Vim c++ 根据头文件生成源文件

c++ - 在 C++ 中读取数据

delphi - Indy SMTP 在连接方法上挂起或卡住

delphi - 如何使 C++ Builder 中的界面在繁重的计算过程中具有响应能力?

c++builder - 如何使用 C++ Builder 打开带有按钮的新表单?

c++ - 将现有数组归零的最快方法是什么?

c++ - Qmake 项目文件

c++ - 了解旧 C++ 代码的行为