• JSON Spirit 中文支持


     JSON 是一种比XML轻量的数据交换格式,应用越来越广泛,尤其是网页数据方面。其作为Javascript的字符描述语言,可以被自动解析;PHP 5.2以上也内置了JSON解析函数。在C/C++语言开发中,目前开源的JSON处理库也很多,包括JsonCPP, QJson, JSON Spirit, jaula,json-c等,但是其中支持Windows平台且支持中文的好像只有json-c。

        公司产品开发中一直用的库是JSON Spirit,最近碰到了中文支持的问题:每次读写带有中文的JSON字符串到文件,都会返回异常。(貌似不与IO打交道时还可以用。)

        跟了一下JSON Spirit的源码,发现它是基于STL/boost标准库实现的,数据结构也都是在这些库的基础上扩展的。当然,IO stream也是STL的标准流。那么,要想让JSON Spirit支持中文,也就是要让标准流支持中文;要想让IO流支持中文,就需要在IO流中选入支持中文的locale对象。至于locale的相关知识,请参考这篇文章:locale详解

        JSON Spirit库提供了读写文件的函数,使用起来非常方便。通过以上分析,读JSON字符串文件的代码可以这样写:

       

        wstring wstrFile = L"D:json.txt";

        wifstream is( wstrFile.c_str());
        is.imbue(locale("chs"));
        json_spirit::wValue value;
        if( json_spirit::read( is, value) == false)
        {
             ...

        }
        is.close();

        ... // handle json string

       

       

        写JSON字符串文件的代码为:

     

        wstring wstrFile = L"D:json.txt";

        wofstream os( wstrFile.c_str());
        os.imbue(locale("chs"));
        json_spirit::write_formatted( objData, os);
        os.close();

     

        这样,JSON Spirit库就可以支持读写带有中文字符串的文件了。

  • 相关阅读:
    继承
    接口
    匿名内部类
    抽象类和接口的区别
    多态
    重载和覆写的区别|this和super区别
    Visual C# 2008+SQL Server 2005 数据库与网络开发――2.2.1 变量
    Visual C# 2008+SQL Server 2005 数据库与网络开发――2.3.1 选择语句
    Visual C# 2008+SQL Server 2005 数据库与网络开发―― 2.5错误和异常处理
    Visual C# 2008+SQL Server 2005 数据库与网络开发―― 2.3 语句
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13318725.html
Copyright © 2020-2023  润新知