c++ - Rapidjson 根本不编码 utf8 序列

标签 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

最佳答案

我在 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/

相关文章:

c++ - 在我的小部件应用程序中的 qt mainwindow.ui 窗口中打印文本

c++ - 从字符串转换为double和int-C++

javascript - 在 Json 中填充子对象

css - 浏览器中不显示中文字体系列

sql-server - 是否可以让 SQL Server 将排序规则转换为 UTF-8/UTF-16

c++ - 在 C++ 中,使用异常和 try/catch 而不是仅仅返回错误代码有什么好处?

c++ - 在提升线程中调用 pthread_getspecific 时访问错误

java - 无法使用 Gson 反序列化 List 对象

json - Swift Google Directions API JSON - EXC_BAD_INSTRUCTION(代码=EXC_I386_INVOP,子代码=0x0)

JavaScript UTF-8 文件读写保存在 XUL 中