我使用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?
答案 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 *。