如何让jsoncpp对Unicode字符串进行\\uXXXX格式转义编码?
如何让JsonCpp将Unicode字符转义为\uXXXX格式?
你遇到的情况是JsonCpp默认Writer的正常行为——StyledWriter和FastWriter都会直接输出UTF-8编码的字符,不会自动将非ASCII的Unicode字符转义成\uXXXX格式。要实现这个需求,你可以借助JsonCpp的StreamWriterBuilder来配置输出规则,这也是新版JsonCpp(0.10.x及以上)推荐的用法。
解决方案代码示例
替换你原来的Writer实现,改用StreamWriterBuilder并配置emitUTF8参数为false:
#include <json/json.h> #include <iostream> #include <memory> // 用于unique_ptr using namespace std; int main(int argc, char ** argv) { Json::Value root; root["test"] = "中文测试123"; // 构建配置器并设置转义规则 Json::StreamWriterBuilder builder; builder["emitUTF8"] = false; // 核心配置:关闭UTF-8直接输出,转为\uXXXX转义 builder["indentation"] = " "; // 可选:保持和StyledWriter一致的缩进风格 // 创建Writer并输出 unique_ptr<Json::StreamWriter> writer(builder.newStreamWriter()); writer->write(root, &cout); cout << endl; return 0; }
输出结果
运行这段代码后,你会得到转义后的JSON:
{ "test" : "\u4e2d\u6587\u6d4b\u8bd5123" }
补充说明
如果你仍在使用旧版JsonCpp(0.6.x及更早版本),StreamWriterBuilder可能不存在,这时你需要自定义一个继承自Json::Writer的类来手动实现Unicode转义逻辑。但更推荐的方式是升级到新版JsonCpp,新版不仅提供了更灵活的配置,也修复了不少旧版的问题。
内容的提问来源于stack exchange,提问作者daisy
相关产品推荐
相关产品推荐

