解决使用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使用property_tree/json_parser处理包含中文字符的UTF8时异常的解决办法

这主要是由json_parser_read.hpp里面的一个bug造成的,修改如下代码:         struct a_unicode         {             conte...
  • dotphoenix
  • dotphoenix
  • 2014年12月25日 17:22
  • 3524

Boost ptree解析中文字符

Boost ptree解析中文字符flyfish 2015-12-30JSON格式 头文件#include "boost/property_tree/ptree.hpp" #include "boo...
  • flyfish1986
  • flyfish1986
  • 2015年12月30日 15:12
  • 1084

boost 解决中文乱码问题

用ptree即可,不用wptree,需要修改一串代码   G:\第三方源码\boost_1_57_0\boost\property_tree\detail\ json_parser_write....
  • miaoweijun
  • miaoweijun
  • 2015年04月17日 15:29
  • 760

boost json中文显示问题

boost对于中文的支持 只能说不好,它会把中文转成Unicode格式 没有显示正常的中文,这在多语言环境下传输会造成妨碍,所以通过修改boost内置的代码实现中文正常显示 在json_parser...
  • fjjfdh19900216
  • fjjfdh19900216
  • 2015年01月12日 10:22
  • 216

如何使用boost::property_tree表示JSON数组

创建JSON数组:boost::property_tree::ptree array;array.push_back(std::make_pair("", "element0"));array.pus...
  • HarbinZJU
  • HarbinZJU
  • 2011年07月25日 16:10
  • 7692

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

boost生成和解析json的完整例子
  • dotphoenix
  • dotphoenix
  • 2014年05月26日 14:35
  • 12785

Boost解析json格式文本

Boost解析json格式文本 flyfish 2015-4-1 property_tree可以解析ini,xml,json,info等格式的文本 以下示例是解析json格式的文本 需要包...
  • flyfish1986
  • flyfish1986
  • 2015年04月01日 15:56
  • 5460

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

在stack OverFlow 找到答案: I found some solutions. In general you needs to specify boost::property_tree:...
  • liangzhao_jay
  • liangzhao_jay
  • 2017年10月17日 18:01
  • 213

boost.property_tree解析xml的帮助类以及中文解析问题的解决

boost.property_tree可以用来解析xml和json文件,我主要用它来解析xml文件,它内部封装了号称最快的xml解析器rapid_xml,其解析效率还是很好的。但是在使用过程中却发现各...
  • hu_jiangan
  • hu_jiangan
  • 2015年11月20日 11:55
  • 1746

boost::property_tree::write_xml写中文乱码问题

通过boost::property_tree::write_xml默认写中文是会出现乱码,解决方法如下: boost::property_tree::xml_parser::xml_writer...
  • vivasoft
  • vivasoft
  • 2015年07月11日 09:56
  • 2819
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:解决使用Boost的ptree输出json中文乱码的问题
举报原因:
原因补充:

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