如何让jsoncpp对unicode字符串进行编码?

时间:2018-06-01 06:32:18

标签: c++ linux jsoncpp

我使用以下代码测试jsoncpp

#include <json/json.h>
#include <iostream>

using namespace std;

int main(int argc, char ** argv)
{
    Json::Value root;
    root["test"] = "中文测试123";

    Json::StyledWriter styledWriter;
    cout << styledWriter.write(root) << endl;

    return 0;
}

输出就像这样

{
   "test" : "中文测试123"
}

我想知道jsoncpp是否可以将这些unicode转义为\\uXXXX

我已尝试过FastWriter和StyledWriter,其中没有它们正常工作

1 个答案:

答案 0 :(得分:0)

这取决于您使用的版本。


使用 jsoncpp 1.8.3

{
   "test" : "中文测试123"
}

使用 jsoncpp 1.8.4

<块引用>

于 2017 年 12 月 21 日发布
相关提交:Serialize UTF-8 string with Unicode escapes (#687)

{
   "test" : "\u4e2d\u6587\u6d4b\u8bd5123"
}

使用 jsoncpp 1.9.2

<块引用>

于 2019 年 11 月 14 日发布
相关提交:添加了emitUTF8 设置。 (#1045)

#include <json/json.h>
#include <iostream>

void print_json(const Json::Value& value, bool emitUTF8) {
    Json::StreamWriterBuilder builder;
    builder.settings_["emitUTF8"] = emitUTF8;
    std::unique_ptr<Json::StreamWriter> writer(builder.newStreamWriter());
    writer->write(value, &std::cout);
}

int main() {
    Json::Value root;
    root["test"] = "中文测试123";

    print_json(root, true);
    std::cout << std::endl;
    print_json(root, false);
}

/*
output:
{
    "test" : "中文测试123"
}
{
    "test" : "\u4e2d\u6587\u6d4b\u8bd5123"
}
*/