1

我正在尝试使用 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 模板,但这里也没有内存流的文档

有任何想法吗?我也试过 jsoncpp,但是那个库也不支持 unicode

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

4

1 回答 1

2

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

于 2015-04-25T09:56:19.177 回答