使用 TIdHTTP->Put() 编码 utf-8

Encoding utf-8 with TIdHTTP->Put()

我想使用 TIdHTTP 将 json 数据放入 REST 服务。

只要 json-数据 (ÅÄÖ) 中没有斯堪的纳维亚字母,它就可以工作。然后服务器拒绝该消息。我可以用 Postman 发送相同的数据,所以这不是服务器问题。

我的代码:

String JsonData = "{...}";

TStringStream *JsonStream = new TStringStream(JsonData);

IdHTTP1->Request->CustomHeaders->AddValue("user", AUser);
IdHTTP1->Request->CustomHeaders->AddValue("password", APassword);
IdHTTP1->Request->ContentType = "application/json";
IdHTTP1->Request->CharSet = "utf-8";

IdHTTP1->Put("https://restserver", JsonStream);

delete JsonStream;

我在 Delphi 中找到了示例,您可以在其中创建带有编码标志的 TStringStream:

AStream := TStringStream.Create(SomeData, TEncoding.UTF8);

但我看不出等价物在 C++ 中是如何工作的。

这是一个用 C++Builder v10.3 编写的多设备应用程序

TEncoding class is declared in the <System.SysUtils.hpp> header, and has a static UTF8 property (an example of its use 在 Embarcadero 的 DocWiki 中)。在您的情况下,TStringStream 的构造应如下所示:

TStringStream *JsonStream = new TStringStream(JsonData, TEncoding::UTF8, false);