JsonCpp第五课读取带BOM的UTF-8编码文本

知识解读
             在Windows通过记事本打开的UTF-8编码文件,默认会在保存的时候,往文件开头多添加三个字节EF BB BF,表明文本的编码方式是UTF-8,这种技术就叫做BOM(Byte Order Mark,就是字节序标记)。在Unix或者Linux操作系统中不会出现这种情况。如果该文本是ANSI格式编码的,也没有添加其他的字符。

创新互联专注于网站建设,为客户提供成都网站设计、网站建设、网页设计开发服务,多年建网站服务经验,各类网站都可以开发,品牌网站设计,公司官网,公司展示网站,网站设计,建网站费用,建网站多少钱,价格优惠,收费合理。

文本内容读取差异
带有BOM的文本字节流
"锘縖\r\n{\r\n\t\"version\": \"1.0.0\",\r\n\t\"messagetype\": \"alarm\",\r\n\t\"cmdtype\": 10009,\r\n\t\"sn\":\"202039248932482934\"

不带BOM的文本字节流
"[\r\n{\r\n\t\"version\": \"1.0.0\",\r\n\t\"messagetype\": \"alarm\",\r\n\t\"cmdtype\": 10009,\r\n\t\"sn\": \"202039248932482934\"

问题
 默认情况下传递带有BOM的文本字节流给JsonCpp解析,肯定是解析不出来的,因为多了EF BB BF三个字节,所以需要将这三个字节从文本中剔除

代码
 std::ifstream ifs;
 ifs.open(pFileName, std::ifstream::in | std::ifstream::binary);

 std::string str((std::istreambuf_iterator(ifs)), std::istreambuf_iterator());
 std::string strValidJson;
 if ((0xef == (unsigned char)str[0]) && (0xbb == (unsigned char)str[1]) && (0xbf == (unsigned char)str[2]))
 {
  strValidJson = str.substr(3, str.length() - 3);
 }
 else
 {
  strValidJson = str;
 }
 //开始解析Json文本
 Json::Reader reader;
 Json::Value root;
 if (NULL == reader.parse(strJson, root)) 

{

ifstream.close();

return;

}


本文题目:JsonCpp第五课读取带BOM的UTF-8编码文本
标题链接:http://bzwzjz.com/article/psccgc.html

其他资讯

Copyright © 2007-2020 广东宝晨空调科技有限公司 All Rights Reserved 粤ICP备2022107769号
友情链接: 成都网站制作 成都网站制作 营销型网站建设 阿坝网站设计 网站建设方案 成都做网站建设公司 重庆网站建设 营销网站建设 攀枝花网站设计 成都网站建设推广 自适应网站建设 网站建设公司 手机网站建设套餐 重庆网站设计 成都商城网站建设 成都网站设计 定制网站设计 企业网站建设 移动网站建设 网站设计制作 成都网站建设公司 成都企业网站设计