JsonCpp第五課讀取帶BOM的UTF-8編碼文本

知識(shí)解讀
?????????????在Windows通過記事本打開的UTF-8編碼文件,默認(rèn)會(huì)在保存的時(shí)候,往文件開頭多添加三個(gè)字節(jié)EF BB BF,表明文本的編碼方式是UTF-8,這種技術(shù)就叫做BOM(Byte Order Mark,就是字節(jié)序標(biāo)記)。在Unix或者Linux操作系統(tǒng)中不會(huì)出現(xiàn)這種情況。如果該文本是ANSI格式編碼的,也沒有添加其他的字符。

創(chuàng)新互聯(lián)專注于網(wǎng)站建設(shè),為客戶提供成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)開發(fā)服務(wù),多年建網(wǎng)站服務(wù)經(jīng)驗(yàn),各類網(wǎng)站都可以開發(fā),品牌網(wǎng)站設(shè)計(jì),公司官網(wǎng),公司展示網(wǎng)站,網(wǎng)站設(shè)計(jì),建網(wǎng)站費(fèi)用,建網(wǎng)站多少錢,價(jià)格優(yōu)惠,收費(fèi)合理。

文本內(nèi)容讀取差異
帶有BOM的文本字節(jié)流
"锘縖\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的文本字節(jié)流
"[\r\n{\r\n\t\"version\": \"1.0.0\",\r\n\t\"messagetype\": \"alarm\",\r\n\t\"cmdtype\": 10009,\r\n\t\"sn\": \"202039248932482934\"

問題
?默認(rèn)情況下傳遞帶有BOM的文本字節(jié)流給JsonCpp解析,肯定是解析不出來的,因?yàn)槎嗔薊F BB BF三個(gè)字節(jié),所以需要將這三個(gè)字節(jié)從文本中剔除

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

?std::string str((std::istreambuf_iterator<char>(ifs)), std::istreambuf_iterator<char>());
?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://bm7419.com/article12/psccgc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App開發(fā)、網(wǎng)站導(dǎo)航、小程序開發(fā)、、企業(yè)網(wǎng)站制作、品牌網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化