Rapidjson根本不编码utf8序列

时间:2015-04-25 01:39:29

标签: c++ json utf-8 rapidjson

我正在尝试使用rapidjson将utf8序列转换为\uXXXX格式,但它不起作用。

StringBuffer s;
Writer<StringBuffer, Document::EncodingType, ASCII<> > writer(s);
writer.StartObject();
writer.String("chinese");
writer.String("中文测试");
writer.EndObject();
cout << s.GetString() << endl;

该文件称它将被转义,但实际上它已被删除。

我尝试使用AutoUTF模板,但是here's no document for memory stream either

有什么想法吗?我也尝试了jsoncpp,但该库也不支持unicode

谢谢@Milo Yip,我忘了提到我正在使用Visual Studio 2010

1 个答案:

答案 0 :(得分:2)

我在OS X上尝试过它的工作原理:

{"chinese":"\u4E2D\u6587\u6D4B\u8BD5"}

我认为问题在于,您使用的编译器不会将文字字符串"中文测试"编码为UTF-8。 Linux / OSX将源代码视为UTF-8,但默认情况下不支持Windows。

您可以尝试使用C ++ 11 UTF-8文字u8"中文测试"。或者,您可以从UTF-8编码的文件中读取字符串以进行测试。

问题已更新。在Visual Studio 2010及之后,有一个未记录的功能:

#pragma execution_character_set("utf-8")

这样文字字符以UTF-8编码。对于C ++ 11兼容的编译器,应使用u8"xxx"文字。

无论如何,声称“Rapidjson根本不编码utf8序列”是不正确的。