レッスンJsonCppは、BOMを持つテキストのUTF-8エンコーディングを読みます

知識の解釈
             ファイルを開くには、Windowsのメモ帳でエンコードされたUTF-8で、デフォルトはこの技術が呼び出され、時間を節約する3バイトEF BB BFの先頭に複数のファイルを追加し、テキストエンコーディングがUTF-8で表示されますBOM(バイトオーダーマークは、バイトオーダーマークです)。これは、UNIXまたはLinuxオペレーティング・システムでは発生しません。テキストはANSI形式でエンコードされている場合、また、他の文字を追加します。


テキスト読み取り差
BOMでテキストバイトストリーム
"夏諾\ R \ N {\ Rの\ n個の\ Tの\"バージョン\ ":\" 1.0.0 \ "\ R \ n \ T \"にmessageType \ "\"アラーム\ "\ R \ n \ T \" cmdtype \ ":10009、\ R \ n \ T \" SN \ ":\" 202039248932482934 \ "

不带BOM的文本字节流
"[\ Rを\ n {\ Rの\ n個の\ Tの\"バージョン\ 1.0.0 \ "\" "\ R \ n \ T \ "にmessageType \" \"アラーム\」、\ rをする\ n \ T \ "cmdtype \":10009、\ R \ n \ T \ "SN \":\ "202039248932482934 \"


問題の
 ために3バイト以上EF BB BF JsonCppのデフォルトを解決するために例BOMを持つテキストバイトストリームを渡すには、構文解析は、アウト確かではありませんので、彼らは、テキストから削除これらの3つのバイトを必要とします


代码
 のstd ::はifstreamのIFS;
 ifs.open(pFileName、STD ::はifstream ::中|のstd ::はifstream ::バイナリ)。

 std ::文字列str((スタンダード:: istreambuf_iterator <CHAR>(IFS))、のstd :: istreambuf_iterator <CHAR>());
 std ::文字列strValidJson。
 IF((0xEFという==(unsigned char型)STR [0])&&(0xbb ==(unsigned char型)STR [1])&&(0xbfの==(unsigned char型)STR [2]))
 {
  strValidJson = str.substr (3、str.length() - 3)。
 }
 他
 {
  strValidJson = STR。
 }
 //开始解析JSON文本
 JSON ::リーダーリーダー。
 JSON ::バリュールート。
 (NULL == reader.parse(strJson、根))の復帰であれば、


おすすめ

転載: blog.51cto.com/fengyuzaitu/2412115