解决使用Boost的ptree输出json中文乱码的问题

原创 2015年07月07日 21:24:10

本文所使用的boost为1.55版本。

使用boost的ptree输出json的时候,中文会被转换为\uxxxx的utf8编码形式,json的标准中对于中文是转换为\uxxxx的utf16编码形式。

boost的这种utf8的格式大多数的库都无法正常解析,除了boost自己。也不知boost为什么非要转成这种冷门格式,怎么和其他库通信啊。

而boost也没有留任何的配置接口来应对这种情况,想解决就必须改ptree的源码。

boost的boost\property_tree\detail目录下有一个json_parser_write.hpp文件,这里实现了json的输出。

其中有一个create_escapes函数,这个函数将字符串将中文转换为了\uxxxx的utf8编码。create_escapes函数在write_json_helper函数中被调用了两次。

想解决这个问题最简单的解决方法就是把这个函数的调用去掉。但是这样会影响到所有使用了这份boost库的程序,而通常boost库都是多个项目共享的。

所以比较好的方式就是给外层的调用函数加一个默认参数,如果这个参数被设置那么就不调用create_escapes函数。

这样因为默认参数的存在,其他使用了ptree库的代码依然会对中文进行转换,不影响其他程序。

当然了,这里取消create_escapes函数的调用只是会将中文原样输出,如果想要获取标准的utf16编码形式的输出,需要自己再写一个函数来转换,然后根据传入的参数选择调用。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Boost ptree解析中文字符

Boost ptree解析中文字符flyfish 2015-12-30JSON格式 头文件#include "boost/property_tree/ptree.hpp" #include "boo...

boost使用property_tree/json_parser处理包含中文字符的UTF8时异常的解决办法

这主要是由json_parser_read.hpp里面的一个bug造成的,修改如下代码:         struct a_unicode         {             conte...

boost json线程不安全及其解决办法

项目中用多线程解析json数据,其中用到了boost 的json parser,但是近来发现问题会导致程序出core,最终定位原因是 boost json parser中用到ptree底层依赖boos...
  • zawdd
  • zawdd
  • 2016年11月23日 17:47
  • 919

boost生成和解析json实例及定向到文件

生成: // test.cpp #include #include #include #include #include using namespace std; using namesp...

boost解析json文件

#include #include #include #include using namespace std; const std::string file_path = "./te...

c++里boost:ptree 用作生成json,中文乱码如何解决?

在stack OverFlow 找到答案: I found some solutions. In general you needs to specify boost::property_tree:...

boost 编码转换

boost 编码转换: boost::locale::conv::to_utf string source = "....";string s = boost::locale::conv::...

boost生成和解析json的完整例子

boost生成和解析json的完整例子

C++ boost 解析 Json

#include #include #include #include #include #include #include using namespace std; const ...

BOOST JSON 数组解析

JSON消息格式: {“jobIDs”:         ["24324325435",           "ew32trt4ty45yt45"          ] } f...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:解决使用Boost的ptree输出json中文乱码的问题
举报原因:
原因补充:

(最多只允许输入30个字)