关闭

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

标签: boostjson
1449人阅读 评论(0) 收藏 举报
分类:

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

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:76743次
    • 积分:1425
    • 等级:
    • 排名:千里之外
    • 原创:66篇
    • 转载:0篇
    • 译文:0篇
    • 评论:10条
    公告
    文章分类
    最新评论