使用 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);
我想使用 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);