You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:56:04