RapidJSON:用包含中文字符的字符串写

时间:2018-06-17 08:10:20

标签: c++ writer wstring rapidjson

我使用C ++生成了以下JSON:

{
    "ProfileID": "DUO1",
    "ProfileName": "Sample"
}

用于生成的代码是:

string jsonData = "";
StringBuffer sb;
PrettyWriter<StringBuffer> writer(sb);

writer.StartObject();
writer.Key("ProfileID");
writer.String(strProfileId.c_str());

writer.Key("ProfileName");                  
writer.String(strName.c_str());

writer.EndObject();
jsonData = sb.GetString();

它适用于ProfileName的英文版。如果个人资料名称是另一种语言(比如中文),怎么办呢?

我想生成这样的JSON:

{
    "ProfileID": "DUO1",
    "ProfileName": "不用客气"
}

我可以在wstring中设置此中文名称。

如何正确地将此内容写入JSON?

2 个答案:

答案 0 :(得分:0)

RapidJSON supports UTF-8 by default。我猜测问题是你的编译器而不是RapidJson。在linux上,gcc将源代码视为UTF-8,但在Windows上,MSVC不会。

在VS2008上,Tools > Options > Environment > Documents Save documents as Unicode when data cannot be saved in codepage并检查#pragma execution_character_set("utf-8")。 在VS2010及更高版本中,you can change this使用pragma writer.String(u8"不用客气");

然后,您可以编写mysql等内容。

答案 1 :(得分:0)

这是PrettyWritter的签名。

template<typename Stream, typename Encoding = UTF8<>, typename Allocator = MemoryPoolAllocator<> >
class PrettyWriter : public Writer<Stream, Encoding, Allocator>
{...}

它将Encoding作为其第二个模板参数。 默认情况下是UTF8 <>,它是const char *。 您必须使用多字节编码来支持多种语言。 RapidJson支持UTF8 <>,UTF16 <>和UTF32 <>编码。

通过在代码中将UTF16 <>指定为PrettyWriter对象的第二个模板参数,应该可以解决您的问题。但是对于需要使用不同语言的所有字符串,您将需要使用std :: wstring而不是std :: string和const wchar_t *而不是const char *。