网创优客建站品牌官网
为成都网站建设公司企业提供高品质网站建设
热线:028-86922220
成都专业网站建设公司

定制建站费用3500元

符合中小企业对网站设计、功能常规化式的企业展示型网站建设

成都品牌网站建设

品牌网站建设费用6000元

本套餐主要针对企业品牌型网站、中高端设计、前端互动体验...

成都商城网站建设

商城网站建设费用8000元

商城网站建设因基本功能的需求不同费用上面也有很大的差别...

成都微信网站建设

手机微信网站建站3000元

手机微信网站开发、微信官网、微信商城网站...

建站知识

当前位置:首页 > 建站知识

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;

}

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


文章名称:JsonCpp第五课读取带BOM的UTF-8编码文本-创新互联
标题来源:http://bjjierui.cn/article/ehejc.html

其他资讯