知識の解釈
ファイルを開くには、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、根))の復帰であれば、