我正在尝试使用 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
最佳答案
我在 OS X 上试过,它可以工作:
{"chinese":"\u4E2D\u6587\u6D4B\u8BD5"}
我认为问题在于,您使用的编译器没有将文字字符串"中文测试"
编码为UTF-8。 Linux/OSX 将源代码视为 UTF-8,但 Windows 默认不这样做。
你可以尝试使用C++11 UTF-8 literal u8"中文测试"
。或者您可以从 UTF-8 编码文件中读取字符串进行测试。
问题已更新。在 Visual Studio 2010 及之后的版本中,有一个未记录的功能:
#pragma execution_character_set("utf-8")
这样文字字符就以 UTF-8 编码。对于 C++11 兼容编译器,应使用 u8"xxx"
文字。
无论如何,“Rapidjson 根本不编码 utf8 序列”的说法是不正确的。
关于c++ - Rapidjson 根本不编码 utf8 序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29860029/