2015-04-25 176 views
1

我试图使用rapidjson来转义utf8序列为\uXXXX格式,但它不起作用。Rapidjson根本不编码utf8序列

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业,我忘了提我使用Visual Studio 2010

回答

1

我试图在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序列”是不正确的。

+0

哦,我正在运行Visual Studio 2010,将它添加到帖子中 – daisy