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

本文所使用的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编码形式的输出,需要自己再写一个函数来转换,然后根据传入的参数选择调用。

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/bjrxyz/article/details/46794393
文章标签: boost json
个人分类: c++
上一篇boost在lambda表达式中调用占位符参数的成员函数的方法
下一篇使用nuget管理c++库的原理
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭