Rapidjson根本不编码utf8序列

Rapidjson does not encode utf8 sequence at all

本文关键字:utf8 序列 编码 Rapidjson      更新时间:2023-10-16

我正在尝试使用 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叶,我忘了提到我正在使用Visual Studio 2010

我在OS X上尝试过,它可以工作:

{"chinese":"u4E2Du6587u6D4Bu8BD5"}

我认为问题是,您使用的编译器没有将文字字符串"中文测试"编码为 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序列"的说法是不正确的。