久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码av不卡一区二区|久久亚洲精品中文字

ARTICLE DETAIL

資訊詳情

深耕商務建站與企業(yè)官網(wǎng)運營的一線實戰(zhàn)洞察。

VC6.0下jsoncpp配置與中文亂碼處理:編譯選項與編碼轉換實踐

VC6.0下jsoncpp配置與中文亂碼處理:編譯選項與編碼轉換實踐 簡介面向 VC6.0 開發(fā)者的 JSONCPP 集成資源針對在 Visual C 6.0 環(huán)境下解析、生成 JSON 時常見的中文亂碼問題提供了完整的案例工程與可直接運行的程序。壓縮包共 72 個文件整體 3.77MB以頭文件h、源碼cpp、內聯(lián)模板inl為核心附帶工程文件dsp/dsw、界面資源rc/ico以及編譯輔助文件obj/sbr并包含一份【重要】使用說明文檔和必讀文本。已有 590 人學習下載資源內置 jsoncpp-src-0.5.0 源碼無需另行編譯庫文件加入工程即可使用。具體內容包括完整的 VC6.0 對話框/控制臺測試案例、中文 UTF-8 編碼處理配置、JSON 解析與序列化的可運行演示以及排錯思路。通過使用說明文檔可快速掌握在 VC6.0 中規(guī)避中文亂碼、穩(wěn)定處理 JSON 數(shù)據(jù)的方法對維護舊系統(tǒng)或學習早期 C 項目集成的開發(fā)者尤為實用。1. 給 VC6.0 補上 JSON 解析能力為什么首選 jsoncpp早該被淘汰的 VC6.0 依然在工控、教學和存量維護項目里大量存在而 JSON 已經成為設備接口和配置文件的默認交換格式。在 VC6.0 上解析 JSON 有個天然痛點這個古董編譯器只支持 C98 的早期子集很多現(xiàn)代 C 庫根本編不過更不用說 STL 的 wchar_t 支持和編碼處理在 VC6 上表現(xiàn)得極其別扭。jsoncpp 是少有的、能在這個環(huán)境下穩(wěn)定編譯的 C JSON 庫而且它開源、單包可移植、API 足夠直觀適合嵌入式設備調試工具和 Windows 老項目里做配置讀寫。這份資源的價值在于把 jsoncpp 的源碼包、工程配置、各種解析和生成案例全部打包好并且專門對中文亂碼做了預處理拿到手不用再去網(wǎng)上東拼西湊找兼容補丁適合做設備聯(lián)調、寫上位機工具、維護老系統(tǒng)的從業(yè)者。2. 搭建 VC6.0 的 jsoncpp 環(huán)境頭文件、靜態(tài)庫與工程選項2.1 編譯前的準備源碼里挑對文件別一股腦全編進工程jsoncpp 的源碼從 GitHub 上下下來是一整個倉庫但 VC6.0 的工程不需要那么多文件。我一般只挑src/lib_json目錄下的json_reader.cpp、json_writer.cpp、json_value.cpp三個實現(xiàn)文件以及include目錄下的json/頭文件目錄。其他如json_tool.h、json_batchallocator.h是這三個文件內部依賴的輔助頭不需要額外加入工程編譯時自動帶上。很多人在這一步翻車的原因是直接把整個src目錄拉進工程結果json_reader.cpp里引用了json_batchallocator.h而 VC6 的預處理器對當前文件所在目錄的搜索順序和現(xiàn)代 IDE 不一樣經常報“無法打開包含文件”的錯誤。解決辦法是把include目錄在“工具 - 選項 - 目錄 - Include files”里加到最前面同時把src/lib_json目錄也加進包含路徑這樣三個 cpp 文件無論放在工程的哪個子目錄都能正確找到頭文件。// 在工程設置里添加包含路徑后頭文件這樣引用即可 #include json/json.h #include iostream #include fstream這段代碼的頭文件引用方式決定了你的工程目錄結構json/json.h意味著你的包含路徑必須指向include目錄這樣編譯器會去include/json/下找json.h。我見過有人把json.h直接拷到工程根目錄再改成#include json.h也能編過但后續(xù)升級源碼包時容易漏掉其他頭文件不建議這么干。如果用的是源碼包里的json/json.h那json/value.h、json/reader.h、json/writer.h、json/features.h這些也會被自動遞歸包含不需要手動逐個添加。2.2 編譯選項的四個關鍵點C 語言標準、warning 級別和預處理指令VC6.0 對 C 標準的支持停留在 1998 年之前的水準比 C98 還要老。jsoncpp 官方源碼為了兼容舊編譯器在json/config.h里做了一些預處理判斷但 VC6 的_MSC_VER值對應的是 1200新版 jsoncpp 的某些分支沒有覆蓋到這個老版本所以需要在工程里強制定義兩個宏來解決。// 在工程設置 - C/C - Preprocessor definitions 里添加 // _WIN32 // _MSC_VER1200 // JSON_NO_INT64 (如果不需要 64 位整數(shù)解析)第一個宏_WIN32是確認 Windows 平臺jsoncpp 內部有一些平臺相關的分支沒有這個宏會走 Linux 分支導致std::string的迭代器類型不匹配。_MSC_VER1200是讓編譯器報告自己的版本號jsoncpp 的config.h里有針對_MSC_VER的#if _MSC_VER 1400之類的判斷會啟用一些舊代碼路徑比如禁用long long的格式化輸出。JSON_NO_INT64是可選宏老工程不需要解析超過 32 位整數(shù)的 JSON 時建議加上防止Json::Value內部使用json_int_t類型在 VC6 下出現(xiàn)__int64與long long混用問題。Warning 級別我建議設置在Level 1也就是只顯示嚴重警告。jsoncpp 的源碼本身能通過 Level 1 編譯但如果有第三方庫一起編譯Level 4 的警告可能刷屏。最煩人的是 VC6 對某些for循環(huán)作用域的處理和標準不一致jsoncpp 源碼里已經盡量避免但你真的遇到for loop initial declaration used outside C99 mode之類的提示需要在編譯選項里把Disable Language Extensions關掉也就是不要勾選“禁用語言擴展”。2.3 編譯成靜態(tài)庫還是直接用源碼兩種方式的效率對比在 VC6.0 里使用 jsoncpp 有兩種姿勢把三個 cpp 文件直接加進自己的工程一起編譯或者先編譯一個json_lib.lib靜態(tài)庫再用。直接加源碼的方式最簡單但每次編譯整個工程都要重新編譯 jsoncpp 的三個文件工程稍微大一點就浪費時間。編靜態(tài)庫的方式一勞永逸但初次配置稍微繁瑣。靜態(tài)庫工程的配置要點新建一個 Win32 Static Library 工程把三個 cpp 文件加進去編譯選項和 2.2 節(jié)完全一致然后編譯生成.lib文件。在使用端工程的“鏈接器 - 輸入 - 附加依賴項”里填入這個 lib 的名字和路徑。需要注意VC6 的靜態(tài)庫有單線程版和多線程版之分如果你的使用端工程用的是 Debug Multithreaded那靜態(tài)庫也必須用相同的運行時庫選項編譯否則鏈接時會報LNK2005或LNK4098這種符號沖突錯誤。# 鏈接器報錯示例LNK2005 _malloc already defined in LIBCMT.lib # 原因靜態(tài)庫用單線程 CRT(/ML) 編譯而使用端用多線程 CRT(/MT) # 解決在靜態(tài)庫工程設置里把 Runtime library 改成和使用端一致的選項我一般習慣直接編靜態(tài)庫特別是在維護多個老項目的時候一份編譯好的 lib 可以給三四個工程共用。但如果你是第一次調通 jsoncpp我建議先用直接加源碼的方式跑通代碼邏輯等確認沒問題再抽成靜態(tài)庫否則一次出現(xiàn)環(huán)境問題和代碼問題疊加在一起排錯會非常痛苦。3. 基礎解析案例從單層對象到嵌套數(shù)組的實際用法3.1 讀一個簡單 JSON 對象parse 的三種方式與返回值處理jsoncpp 的Reader類提供三種 parse 重載形式接收 C 字符串、接收std::string、接收std::istream。在 VC6.0 里std::istream重載形式用得最多因為設備接口經常把 JSON 數(shù)據(jù)放在文件流或串口數(shù)據(jù)流里。無論哪種重載第一個參數(shù)是 JSON 數(shù)據(jù)源第二個參數(shù)是接收結果的Json::Value引用返回bool表示解析是否成功。#include json/json.h #include iostream #include fstream bool parseJsonFile(const char* filePath, Json::Value root) { std::ifstream fin(filePath); if (!fin.is_open()) { std::cerr Cannot open file: filePath std::endl; return false; } Json::Reader reader; bool success reader.parse(fin, root, false); if (!success) { // 用 collectErrors 拿到具體錯誤信息 std::string errMsg reader.getFormatedErrorMessages(); std::cerr Parse error: errMsg std::endl; } fin.close(); return success; }這段代碼演示了標準的三步流程打開文件流、調用 parse、失敗時取錯誤信息。第三個參數(shù)false表示不收集所有錯誤信息只保留第一條錯誤這樣出錯時能快速定位。getFormatedErrorMessages()在解析失敗時返回包含行列號的錯誤描述這個信息在調試設備返回的半截 JSON 數(shù)據(jù)時特別實用能直接告訴你 JSON 在哪一行哪個位置斷了。有一個容易被忽略的點parse 成功后Json::Value對象里的數(shù)據(jù)如果不及時提取會隨root的生命周期失效。所以解析函數(shù)盡量不要把Json::Value以值方式返回而是用引用參數(shù)傳入或者用智能指針管理。VC6 沒有std::shared_ptr一般用auto_ptr或者直接傳引用的方式我習慣傳引用代碼更直白也不會在對象拷貝時觸發(fā) jsoncpp 內部引用計數(shù)的隱患。3.2 取字段值的類型判斷isValidMember 與 type 檢查配合設備返回的 JSON 字段經常缺失或者類型不對有些人直接root[temperature].asDouble()取完之后才發(fā)現(xiàn)數(shù)據(jù)是字符串類型的23.5asDouble 返回 0排查半天。jsoncpp 的Value::isMember()方法只判斷字段是否存在不判斷類型對不對。更穩(wěn)妥的寫法是先判斷類型再決定怎么取值。bool readTemperature(const Json::Value root, double temp) { const char* fieldName temperature; if (!root.isMember(fieldName)) { std::cerr Field missing: fieldName std::endl; return false; } const Json::Value field root[fieldName]; if (field.isDouble() || field.isInt()) { temp field.asDouble(); return true; } else if (field.isString()) { temp atof(field.asCString()); return true; } std::cerr Field type mismatch: fieldName type field.type() std::endl; return false; }這段代碼體現(xiàn)的是防御式解析思路先檢查字段存在性再檢查類型字符串數(shù)字也用atof兜底轉換。field.type()返回一個枚舉值Json::intValue為 0、uintValue為 1、realValue為 2、stringValue為 3 等等把這些值打印出來排查非常直觀。另外注意field.isInt()在 VC6 下對 32 位整數(shù)有效如果你開啟了JSON_NO_INT64宏那isInt64()方法根本不存在不要去調用否則編譯直接報錯。3.3 解析嵌套數(shù)組數(shù)組遍歷與對象數(shù)組的混合使用解析數(shù)組的核心是size()方法和operator[]的整數(shù)重載。jsoncpp 的數(shù)組可以用for (Json::Value::const_iterator it arr.begin(); it ! arr.end(); it)這種迭代器方式遍歷但在 VC6.0 下迭代器的operator*返回Value的引用類型類型推斷不如現(xiàn)代 C 靈活容易在賦值時多一次拷貝所以直接用索引遍歷更省心。struct SensorPoint { int id; double value; char name[32]; }; bool parseSensorArray(const Json::Value root, SensorPoint* points, int maxCount, int outCount) { if (!root.isMember(sensors) || !root[sensors].isArray()) { std::cerr sensors is not array std::endl; return false; } const Json::Value sensors root[sensors]; outCount 0; int n sensors.size(); if (n maxCount) { std::cerr Array too large: n maxCount std::endl; return false; } for (int i 0; i n; i) { const Json::Value item sensors[i]; if (!item.isObject()) continue; points[i].id item.get(id, -1).asInt(); points[i].value item.get(value, 0.0).asDouble(); strncpy(points[i].name, item.get(name, ).asCString(), 31); points[i].name[31] \0; outCount; } return true; }這里的item.get(id, -1)是 jsoncpp 提供的一個很有價值的方法第二個參數(shù)是默認值字段不存在時直接返回默認值不需要像 3.2 節(jié)那樣先isMember再取。但默認值只保證字段缺失時不崩字段存在但類型不對時get返回的Value還是錯的值所以對可靠性要求高的字段建議先用isMember檢查。數(shù)組遍歷的邊界條件值得注意sensors.size()返回Json::ArrayIndex類型在 VC6 下是unsigned int和int比較時注意符號問題我寫int n sensors.size()時編譯器會提示符號轉換警告直接強轉即可。4. 生成 JSON 數(shù)據(jù)對象構造、寫入文件與格式化控制4.1 用 Value 對象構造嵌套結構Value 的鏈式賦值原理構造 JSON 輸出比解析要友善得多。jsoncpp 的Json::Value重載了operator[]對不存在的字段名會自動創(chuàng)建對應類型的 Value 對象所以可以一層一層地往里塞數(shù)據(jù)。核心邏輯是先創(chuàng)建Value對象然后用[key]的方式賦值數(shù)組用append方法添加元素。Json::Value buildStatusReport() { Json::Value root; root[device_id] DEV-2024-001; root[status] online; root[uptime] 3600; // 嵌套對象直接鏈式訪問子節(jié)點 root[network][ip] 192.168.1.100; root[network][mac] AA:BB:CC:DD:EE:FF; // 數(shù)組先創(chuàng)建空數(shù)組再 append Json::Value sensorList; for (int i 0; i 3; i) { Json::Value item; item[index] i; item[value] i * 1.5; sensorList.append(item); } root[sensors] sensorList; return root; }這里的鏈式賦值root[network][ip] 192.168.1.100看起來像簡單嵌套實際上內部執(zhí)行了兩個步驟第一步root[network]創(chuàng)建一個空的 Value 對象并返回引用第二步在這個引用上再取[ip]并賦值。這種寫法的潛在風險是如果你拼錯了中間層鍵名不會報錯而是自動創(chuàng)建一個新的空對象最終生成的 JSON 里會出現(xiàn)多余的層級。所以寫完構造代碼后最好跑一遍流程把生成的 JSON 打印出來人工確認結構。4.2 縮進與換行設置StyledWriter 還是 FastWriterjsoncpp 提供兩個 Writer 類FastWriter輸出緊湊格式不帶多余空格和換行StyledWriter輸出帶縮進的格式化文本便于人讀。設備對接時我一般用FastWriter因為省流量而且很多嵌入式設備解析器對空白字符處理比較弱。寫配置文件時用StyledWriter方便人工修改。std::string valueToStyledString(const Json::Value value) { Json::StyledWriter writer; return writer.write(value); } std::string valueToFastString(const Json::Value value) { Json::FastWriter writer; return writer.write(value); }兩個 Writer 的write方法都返回std::string而且是拷貝返回不是引用所以函數(shù)返回值直接賦給外部字符串沒問題。有一個隱蔽坑FastWriter默認會在輸出末尾加一個換行符\n這是為了讓輸出適合寫入文件。如果你要把 JSON 拼進網(wǎng)絡協(xié)議幀里需要手動pop_back()或者用字符串裁剪去掉末尾換行。同理StyledWriter輸出末尾也有換行但它的末尾換行是縮進格式的一部分保留比較合理。4.3 中文內容的輸出編碼統(tǒng)一std::string 與 UTF-8 的約定這是 jsoncpp 在 VC6.0 場景下最容易出問題的章節(jié)。jsoncpp 內部的所有字符串處理都按 UTF-8 字節(jié)流理解它不會做編碼轉換。你的程序里如果直接寫中文字符串字面量比如value[name] 溫度傳感器那這個字符串在 VC6 的源碼里是按本地代碼頁中文系統(tǒng)下是 GBK存儲的字節(jié)序列jsoncpp 會把它原樣寫入 JSON 字符串值里不做任何轉譯。把這個 JSON 輸出到任何一個按 UTF-8 解析的設備或網(wǎng)頁時中文就亂碼了。// 錯誤示范直接賦值中文字面量 value[name] 溫度傳感器; // 字符串內是 GBK 字節(jié) // 正確示范先轉成 UTF-8 字節(jié)序列再賦值 value[name] gbkToUtf8(溫度傳感器);這段代碼的gbkToUtf8函數(shù)在資源包里有獨立的實現(xiàn)核心原理是先用MultiByteToWideChar把 GBK 字節(jié)轉成 UTF-16 的寬字符再用WideCharToMultiByte把寬字符轉成 UTF-8 字節(jié)。VC6 的源碼文件默認是 GBK 編碼所以字符串字面量天然是 GBK 字節(jié)流。資源里給的做法是所有中文輸入統(tǒng)一經過這個轉換函數(shù)所有從 JSON 里讀出來的中文字符串如果要顯示到 Windows 窗口也要反向轉成 GBK。5. 解析中文內容實例GBK 與 UTF-8 的字節(jié)層面換算5.1 中文亂碼的根本原因源碼編碼、執(zhí)行編碼與 JSON 編碼的三方不一致解決中文亂碼的關鍵不在于 jsoncpp而在于把三個環(huán)節(jié)的編碼理順。第一個環(huán)節(jié)是 VC6 源碼文件里的字符串字面量編碼中文 Windows 系統(tǒng)上默認是 GBK第二個環(huán)節(jié)是程序運行時字符串在內存里的編碼字面量是什么字節(jié)存進去就是什么字節(jié)第三個環(huán)節(jié)是 jsoncpp 解析和生成的 JSON 數(shù)據(jù)要求是 UTF-8。這三個環(huán)節(jié)只要有兩個不一致就會出現(xiàn)亂碼。我遇到過的典型場景是設備端上報的 JSON 數(shù)據(jù)是 UTF-8 編碼的設備名稱:溫度計解析到Value對象里是正常的 UTF-8 字節(jié)然后用 StyledWriter 打印到屏幕上調試控制臺按 GBK 顯示亂碼。這不是 jsoncpp 的問題是調試輸出環(huán)節(jié)的編碼沒轉換。反過來程序里硬編碼的中文寫入 JSON 再發(fā)給設備設備按 UTF-8 解碼同樣亂碼。所以整個數(shù)據(jù)處理鏈路里任何涉及外部接口的字符串都必須明確標注是 UTF-8 還是 GBK。5.2 源頭修復用 UTF-8 編碼保存源文件直接從編譯期統(tǒng)一一個能根治部分問題的土辦法在 VC6 里把包含中文字面量的源文件保存成 UTF-8 with BOM 編碼。VC6 的編譯器對 UTF-8 with BOM 的源代碼文件會把字符串字面量按 UTF-8 字節(jié)存入目標文件也就是說運行時內存里的字節(jié)已經和 JSON 要求的 UTF-8 一致了。這樣代碼里直接寫value[name] 溫度傳感器也不會亂碼。但這個做法有三個副作用需要注意。第一VC6 的編輯器對 UTF-8 with BOM 的支持不完整打開文件時可能亂碼顯示但不影響編譯結果。第二如果代碼里同時有 GBK 編碼的源文件和 UTF-8 編碼的源文件字符串拼接時會出現(xiàn)半個中文的奇怪字節(jié)排查很困難。第三資源包里自帶的示例代碼有些是 GBK 編碼保存的你如果混用需要在工程設置里區(qū)分不能一刀切。// 用 UTF-8 with BOM 保存源文件后字面量本身已是 UTF-8 // 可以直接賦值不需要運行時轉換 value[device_name] 溫度傳感器; // 但控制臺輸出仍需轉換UTF-8 - GBK std::string name value[device_name].asString(); std::string displayName utf8ToGbk(name.c_str()); printf(%s\n, displayName.c_str());注意這段代碼里的utf8ToGbk是資源包提供的反向轉換函數(shù)和 4.3 節(jié)的gbkToUtf8正好是互逆操作。采用 UTF-8 源文件方案時控制臺輸出前需要做utf8ToGbk轉換否則調試窗口還是亂碼。這個方案的好處是省掉了寫入 JSON 前的轉換步驟缺點是所有的調試輸出都要帶轉換沒有哪種方案是絕對省事的關鍵是統(tǒng)一。5.3 運行時動態(tài)轉換的完整案例解析設備上報的 UTF-8 中文 JSON大多數(shù)智能設備的 JSON 都是 UTF-8 編碼所以解析端需要把 UTF-8 轉成 GBK 才能正常顯示或寫入本地數(shù)據(jù)庫。下面這個函數(shù)讀取設備返回的文件解析后把中文內容轉成 GBK 再打印完整的處理鏈路如下。std::wstring utf8ToUnicode(const char* utf8Str) { int len MultiByteToWideChar(CP_UTF8, 0, utf8Str, -1, NULL, 0); wchar_t* buffer new wchar_t[len]; MultiByteToWideChar(CP_UTF8, 0, utf8Str, -1, buffer, len); std::wstring result(buffer); delete[] buffer; return result; } std::string unicodeToGbk(const wchar_t* wideStr) { int len WideCharToMultiByte(CP_ACP, 0, wideStr, -1, NULL, 0, NULL, NULL); char* buffer new char[len]; WideCharToMultiByte(CP_ACP, 0, wideStr, -1, buffer, len, NULL, NULL); std::string result(buffer); delete[] buffer; return result; } std::string utf8ToGbk(const char* utf8Str) { std::wstring unicodeStr utf8ToUnicode(utf8Str); return unicodeToGbk(unicodeStr.c_str()); }這三個函數(shù)形成了完整的轉換鏈路UTF-8 字節(jié)先轉成 UTF-16 寬字符再由寬字符轉成系統(tǒng) ANSI 編碼即 GBK。MultiByteToWideChar和WideCharToMultiByte是 Windows APIVC6 完全支持不需要額外鏈接庫kernel32 默認已導入。每次轉換都要先調用一次函數(shù)拿緩沖區(qū)長度再分配內存做第二次調用這是 Windows 編碼轉換的標準套路。注意返回值里的-1表示輸入字符串以 null 結尾函數(shù)會處理結尾字符你不需要手動截斷。6. 避坑實測記錄VC6 jsoncpp 的編譯期與運行期暗礁6.1 鏈接錯誤 LNK2005CRT 庫版本沖突現(xiàn)象工程編譯通過鏈接時報LNK2005 _malloc already defined in LIBCMT.lib有時還會伴隨LNK4098警告。原因jsoncpp 編譯成靜態(tài)庫時用的運行庫選項和使用端工程不一致。VC6 的 C 運行時庫有單線程/ML、多線程/MT、多線程調試/MTd、動態(tài)鏈接/MD等模式靜態(tài)庫如果用了 /ML符號定義在 LIBCMT.lib 和 LIBCD.lib 里各有一份鏈接時就會沖突。解決在 jsoncpp 靜態(tài)庫工程和使用端工程里把Project - Settings - C/C - Code Generation - Use run-time library改成完全相同的選項。我一般統(tǒng)一用Debug Multithreaded做調試版Release Multithreaded做發(fā)布版。改完重新編譯兩個工程問題消失。6.2 解析返回 false 且錯誤信息指向第一行BOM 頭作怪現(xiàn)象用reader.parse解析從文件讀入的 JSON 時返回falsegetFormatedErrorMessages報line 1, column 1附近有非法字符但用文本編輯器查看 JSON 文件完全正常。原因JSON 文件被 Windows 記事本或其他編輯器保存成了帶 UTF-8 BOM 的格式文件頭部多出 3 個字節(jié)EF BB BFjsoncpp 解析器不認 BOM把它當成非法字符。解決解析前對文件流做 BOM 檢測和剝離。讀文件后檢查前三個字節(jié)是否是0xEF 0xBB 0xBF是則跳過?;蛘哂胹td::ifstream打開文件后先fin std::ws不能跳過 BOM BOM 不是空白符需要手動處理。資源包里的讀文件函數(shù)已經內置了 BOM 剝離邏輯但如果你自己寫解析函數(shù)記得加上。6.3 解析大文件時程序崩潰遞歸深度與內存分配現(xiàn)象解析一個幾十層嵌套的 JSON 文件或者數(shù)組長度超過幾千時程序直接崩潰沒有異常信息。原因jsoncpp 在舊版本里解析嵌套層級過深的對象時遞歸調用會導致棧溢出數(shù)組過大時append操作頻繁重新分配內存VC6 的默認堆管理器效率低而且容易產生內存碎片。jsoncpp 對解析深度沒有硬限制但運行時棧只有 1MB。解決一是限制 JSON 的嵌套層級設備協(xié)議里明確約定不超過 10 層二是解析前用Json::Reader::getFeatures()里的strictRoot選項把根節(jié)點必須是對象或數(shù)組這一約束打開防止根節(jié)點是數(shù)字或字符串這種非法 JSON 被解析三是如果 JSON 體量很大改用Json::CharReader新版接口配合std::istream流式解析不要一次把整個文件讀入內存。6.4 中文轉出來的 JSON 在設備端顯示成 UTF-8 亂碼現(xiàn)象本機解析和生成 JSON 一切正常但把 JSON 發(fā)到設備或上傳到 Web 服務端后中文變成一堆亂碼而且不是\uXXXX形式。原因數(shù)據(jù)在電腦和服務端之間傳輸時代碼用的是 GBK 字節(jié)串但沒聲明編碼服務端默認按 UTF-8 解碼或者反過來。jsoncpp 在生成 JSON 時不會做轉義中文字符如果以原始 UTF-8 字節(jié)寫入字符串值傳輸層再用 GBK 讀就亂碼。解決在 HTTP 或 TCP 協(xié)議頭里明確charsetutf-8并確保發(fā)送前字符串是 UTF-8 字節(jié)。排查時用一個十六進制查看器看字符串的第一個字節(jié)0xE4開頭是 UTF-8中文通常以 E4-E9 開頭0xC4或0xD6開頭是 GBK。資源包里的案例工程自帶這個排查工具函數(shù)打印每個中文字符的十六進制值。6.5 用 StyledWriter 輸出后字符串被截斷或內容偏移現(xiàn)象StyledWriter寫出的 JSON 字符串復制到別的編輯器里偶爾出現(xiàn)內容偏移字符串值的末尾少了一個字符或者轉義符號被吞掉。原因VC6 的std::string和 C 字符串 API 混用。StyledWriter::write返回的std::string在寫入文件時用了fwrite(str.c_str(), 1, str.length(), fp)但 c_str() 返回的指針可能在后續(xù)字符串對象析構時失效如果你先保存了指針再用就等于野指針。解決凡是 Writer 的輸出一律立即用std::string的值拷貝到自己的變量里不要長期持有const char*。寫入文件的長度用str.length()而不是strlen(str.c_str())因為 JSON 字符串內可能包含\0轉義序列的存儲形式strlen會提前截斷。這些細節(jié)在 VC6 的老標準下特別容易踩現(xiàn)代 C 里 std::string 的優(yōu)化策略反而讓這些問題不容易暴露。7. 最后的技巧把中文轉換封裝成工程級的全局工具收尾要落地一個能直接抄走的東西。資源包里已經附帶了一個獨立的工具模塊叫encoding_util.cpp把 5.3 節(jié)里的 UTF-8 與 GBK 互轉函數(shù)封裝成了CEncodingUtil靜態(tài)類并且加了一個自動識別函數(shù)傳入一個std::string先看字節(jié)特征判斷是否為 UTF-8是則轉 GBK否則原樣返回。這個函數(shù)在調試串口設備數(shù)據(jù)時特別實用因為有些設備的固件版本不同輸出的 JSON 編碼不統(tǒng)一用自動識別可以少寫很多分支判斷。std::string CEncodingUtil::AutoToGbk(const std::string input) { // 判斷是否為 UTF-8 編碼 bool isUtf8 true; const unsigned char* data (const unsigned char*)input.c_str(); int len (int)input.length(); int i 0; while (i len) { if (data[i] 0x80) { i; // ASCII 范圍直接跳過 } else if ((data[i] 0xE0) 0xC0 i 1 len) { if ((data[i1] 0xC0) ! 0x80) { isUtf8 false; break; } i 2; } else if ((data[i] 0xF0) 0xE0 i 2 len) { if ((data[i1] 0xC0) ! 0x80 || (data[i2] 0xC0) ! 0x80) { isUtf8 false; break; } i 3; } else { isUtf8 false; break; } } if (isUtf8 len 0) { return utf8ToGbk(input.c_str()); } return input; }這個自動識別函數(shù)不算百分之百準確但對于常見的中文場景足夠。UTF-8 的多字節(jié)序列有嚴格的比特位模式GBK 的編碼空間和它有部分重疊極少數(shù)情況下會有誤判但概率極低。把這個函數(shù)放在公共模塊里所有項目共用一份比每個 cpp 文件里各寫各的轉換函數(shù)要靠譜得多。驗證轉換是否正確的方法也很簡單調用Json::StyledWriter把生成的 JSON 打印出來在 VC6 的 Output 窗口里如果中文顯示正常說明內存中的字節(jié)已經是 GBK如果在 Output 窗口亂碼但文件內容正常說明是 UTF-8。也可以用資源里帶的一個小工具函數(shù)PrintHex把字符串每個字節(jié)的十六進制打出來對照 ASCII 表查看E4 B8 AD是“中”的 UTF-8 編碼D6 D0是“中”的 GBK 編碼一眼就能分辨當前串是什么編碼。資源包里所有的示例工程默認已經做了三件事源文件統(tǒng)一保存為 UTF-8 with BOM、工程編譯選項預置了_MSC_VER1200和JSON_NO_INT64、所有讀取 JSON 文件的入口都做了 BOM 剝離。你拿到手以后第一件事不是改代碼而是先跑通自帶的 Demo 工程確認你的 VC6 環(huán)境和資源包配置一致再往自己的工程里遷移。從那以后我每次在 VC6 里接入 jsoncpp都強制自己先跑一遍編碼自檢函數(shù)再動業(yè)務代碼這么多年再沒因為亂碼翻過車。希望幫到你。本文還有配套的精品資源點擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
韩国三级色呦呦| 日本欧美不卡| 亚洲āv网址在线观看| 免费看日本操逼视频| 1204金沙人妻懂旧版免费| 国语对白露脸XXXXXX | 亚洲男人天堂AV| 影音先锋中文字幕日本好一区二区| 日韩传媒在线| 操操吧亚洲乱伦视频| 蜜桃视频精品一区二区三区| 懂色中文一区二区三区| 小草av不卡亚洲二区 | 天天肏天天干| 亚洲第一色页夜| 五月天我淫我色av| 亚洲精品1区| 欧美精品xxxwww| 天天享受天天看| 国产精品麻豆成人av| 秋霞午夜视频一区二区| 久久久久国产精品片区无码直播| 亚洲图片91| 精品少妇后入一区二区三区四区人妻巨乳| 少妇色| 亚洲经典啪啪| 国产高清成人免费视频| 国产人伦精品一区二区三区 | 天美传媒婬乱在| 亚洲国男人的天堂| 自拍偷拍 日韩无码| 97超色| 色情五月丁香| 一级做a爰片久久毛片图片| 韩国女主播青草在线| 久久久亚洲欧美综合| 骚日日av| 欧美少妇一区二区三区| 大香蕉久| 91福利网在线观看| 国产成人精品一区| 加勒比大香蕉视频在线| 久久超碰国产一区二区三区| 2017大香蕉| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 五月婷婷丁香六月| 久久久久久久久久va| 国产亚洲日本| 亚洲欧美大| 少妇一级婬片免费放一级a性色.| 亚洲国产亚洲天堂| 极品丝袜无码| 人人操人人摸人| 国产97在线视频| 人人操人人舒服| 欧美日动态视频| 午夜天堂啪啪| 丰满岳乱妇一区二区三区| 人妻美腿丝袜日韩| 日韩精品高清资源在线| 激情五月天社区| 丁香五六月啪啪| 天天日天天干天天摸天天操| 在线视频五十市| 国模精品娜娜一二三区| 色哟哟AⅤ| 中文字幕第95页| 97超碰碰碰| 免费人成在线观看网站品爱网| 午夜欧美精品久久久| 国产美女激情| 蜜桃色院一区久久| 人人爱夜夜爱| 色综合色色| 在线观看亚洲成人精品| 亚洲男人在线观看天堂| 大香蕉日亚洲日本亚大 | 男人夜色天堂ss| 亚欧无码在线| 日本操色导航| 在线有码中文字幕| 亚洲不卡三级手机播放| 日韩无码成人电影| 操B在线观看| 无码 黑人一区二区三区| 天天干人人乐| 九九热只有精品| 国产精品高潮久久AV| 五月天婷婷久久| 一级久久久久久久久久久| a片久久久久久久久久久久 | 在线国产探花| 婷婷中文网| 亚洲色系另类精品国产| 人人操人人插 - 百度 - 百度| 蜜臀久久99精品久久久久久婷婷| 久久婷婷苹果| 蜜桃AV天堂| 另类欧美| 亚洲色性| 中文字幕一区二区无码成人| 青青草原伊人网| 久久久九九| 天天日天天屌天天操| 欧美香蕉视xxx| 国产精品国产自产拍高清AV| 躁躁日曰躁2020| 男人的天堂在线2| 91丝袜在线播放| 亚洲欧美在线丝袜| 97超碰香蕉| 人妻久久一区二区三区 | 国产精品网址| 亚洲日韩美国人妻| 伊人色综合网电影| www久久久| 午夜精品一区二区三区三上悠亚| 色97| 自拍欧美| 91热色| 国产又粗又长的视频| 国产农村妇女毛片精品久久| 天天影视亚洲| 伊人五月天婷婷| 性饥渴少妇av无码毛片| 免费在线观看国内色片网站网址| 蜜乳AV色欲AVAV无码| 美女自卫慰黄网站免费| 青娱乐av在线| 在线观看A啊啊啊| 91爱看| 97精品人妻一二三四| 欧美图片校园春色| 中文字幕一区二区视频在线观看| 国产综合在线视频网站| 三级三级三级日本99| 亚洲欧美第一页| 以及麻豆国产入口在线观看免费| 全免费a敌肛交毛片免费| 免费强奸av| 99热综合| 久久一二三四不卡| 国产成人五月天丁香花| 欧美日韩午夜精品一区二区三区 | 亚洲欧美色图片| 大黄片做爱的大的| 人妻激情另类| 视频黄站| 人妻二区| 色丁香五月婷婷| 日韩精品9999| 天天做天天爱| 国产综合网站在线播放| 日韩欧美女优电影| 中字一区| 男女日B国产| 色噜噜综合网| 日韩淫色网| 九九九九热| 操逼视频免费日韩无码| 抽查国产福利主播| 亚洲欧美伦综合| 青青伊人这里只有精品| 青青草视频久久久久| 久久久久久九九九九九九| 天美av在线观看| 在线亚洲精品久久久| 亚洲激情久久久伊人综合| 性久久久| 国产精品久久久亚洲一区| 九9热伊人| 看免费一级在线播放毛片| 国产又色又爽又舒服的三级视频| 久久影视二区三区行押| 亚洲高清无码在线桃色| 99啪啪| 综合色欧美| 成人福利视频网| 欧美日韩人人早| 丰满人妻一区二区三区色-百度| 亚洲天堂人妻熟妇视频| 乱久久久| 人人看人人爰人人操| 神马福利久草| 网站A V在线| 91 刺激在线| 日日嗷| 日韩久久.一级黄色片| 伊人97色天使| 天天日天天干天天色| 天天日天天舔天天喷天天射| 日本熟妇人妻一区二区三区| 亚洲中文字幕精品久久久久久直播| 91久久18禁| 日韩极品无码B| 男人天堂.AB| 99re6久热只有精品6在线直播| 97人人夜| 黄污污污污| 午夜九九| 大香蕉啪啪网| 97精品在线视频| 97色色婷婷| 欧美色吧综合| 久久国色天香香蕉| 美国黄片aaa| 成人精品视频一区二区| 1769一区| 久插综合| 欧美v亚洲v日韩v最新在线二区| 天天干1区2区在线| 精品国产久热在线观看| 婷婷人妻激情| 欧美黄色图片| 一本精品日本在线视频精品| 亚洲熟女一区| 我要看免费韩日黄片| 国产成人精品网站| 亚洲人成色9999精品久久 | 色欲天香天天综合网-成年人三级片网站-欧美乱妇狂野-日韩国产专区-久久久久久 | 日韩一区二区精品视频| 欧美日韩黄片精品在线| 日本道日本道中文字幕日本道最新日本道在线观看 | 91视频综合在线| 伊人久久大香大香线蕉中文| 嗯嗯不要 视频| 水滴偷拍| 青青草在线视频欧美| 大学生口爆吞精| 中文字幕精品专区搜索结果91| 天天草天天干天天日| 天天拍夜夜| 色老汉色| 97人人模人人爽人人| 99rre在线精品99re8| 97视频网站在线观看| 国产一区二区在线播放量| 91爱看| 熟女被操视频网址| 无遮挡又黄又刺激的视频| 97er欧美性| 五月色网| 极品综合| 哈哈操电影| 嗯嗯啊啊啊好舒服| 色婷婷综合视频| 亚洲伊人久久综合97| 91美女視頻| 亚洲综合网电影91| 久久九九国产精品| 欧美日产国产在线成人第一区| 不卡六六在线91| 99国内精品| 色色色欧美| 麻豆久久一区二区三区| 久久视频,这里只有精品| 亚洲春色激情小说| 久久女婷| 欧美黑人168页欧美黑人167| 欧美老妇综合网| 亚洲成人久久美女| 精品国产一区二区三区香蕉欧美| 97超碰美女| 午夜视频久久久| 欧美se亚洲| 9色在线| 温婉少妇玩3p| 日韩卡一卡二卡三在线| 亚洲97成人在线观看| 亚洲 欧美 第一页| 久热99999| 少妇与黑人高潮在线| www.色婷婷.com| 亚洲国产麻豆一区二区三区| 亚洲 日本 国产 综合| 男人的天堂久久久| 亚洲图片欧美偷拍| 男人天堂久久精品不卡| 精品久久九| 伊人网在线观看| 99.色网| 精品久久久久,69国产成人精| 殴美在线AⅤ| 久久久久久69国产一区二区| 亚洲国产尤物yw在线观看| 亚洲婷婷丁香在线| 久久久新亚洲AV| 69天堂| 99热一区二区三区四区| 欧美色图亚洲色,麻豆| 激情四射五月天| 欧美午夜视频免费观看| 人妻9117c| 一级岛国大片| 伊人丁香五月婷婷| 一二三四视频中文字幕在线看| 91久久青青草原精品| 亚洲全色网| 中欧人妻丝袜中文字幕| 91亚洲网| 亚洲欧美日韩制服另类| 熟女乱伦A| 久干9操| 一级黄色牲爱A级片| 女人 A一级| 久久精品三级影视| 黄色大片一区二区密桃丝袜| 97玖玖人妻| 夜夜高潮夜夜爽高清视频一| 精品一久久久| 97色操| 亚洲图片另类| 被窝影院午夜看片无码| 亚洲免费成人在线高清无码视频| 欧美一区二区三区蜜桃| 欧美啪啪女女| 乱日视频| av东京热男人的天堂| 啊啊啊啊在线播放| 中文字幕一区二区三区人妻不卡 | 久久久久久久久久久精| 久草这里只有精品 | 美女91网站| 香港日本韩国人妇99www.wccm20| 青青草中日韩在线| 91欧美经典| 国产精品黑人一区二区三区| 丁香婷婷九月| 亚洲国产欧美日韩精品一区二区三区,国产一区二区三区在线看片,欧美性猛交 XXX | 国产色精品午夜大片| 婷婷亚洲综合| 美女大乳久久久久久久女人18| 亚洲熟久久| 综合色欧美| 999精品国产高清一区二区| 午夜偷拍久久熟女| 97久精品| 天天干人妻视频| 大学生美女口爆| 激情综合网五月婷婷五月天| 观看免费区二区三区二| 免费男人的天堂| 日本韩高清无砖码22o| 99性爱在线观看| 亚洲AV小说| 亚洲情色在线| 亚洲男人天堂网站| 北约熟女超碰| 97操97色| 青青草好吊色| 欧日a| 青青草在线成人视频| 日韩无码黄色片| 亚洲人人操| 试看60秒| PMv在线观看| 久综合网| 亚洲AV色图一区| www.av家庭乱伦| 综合色啪| 日本不卡一区二区三区| 天天日天天搞天天干| 夜夜操二区| 四虎免费视频| 国产东北女人在线视频| 超碰国产情侣自拍网| 久久九九热| 色综合久久av| 欧美精品第四五页中文字幕在线观看| 中出欧美| 日产狠狠干| 亚洲欧美内射| 亚洲一卡2卡3卡4卡乱码网站 | 9Ⅰ超碰| 自拍大香蕉乱插| 日韩成人无码| 秋霞一集毛片观看| 岛国1区2区3区在线观看| 亚洲欧美另类图片| 国产91 丝袜在线播放00-百度| 亚州Av天美传媒| 美美91成人国产精品欧美精品久久久久久久| 丰满人妻-区二区三区免费| 91在线精品| 欧美成人性爱视频免费观看| 家庭乱伦性爱av| 国产精品亚洲无码| 操迟操逼在巾线Fre看| 欧美一级美片在线观看免费| 天天爽夜夜爽夜夜爽精| 亚洲阿v天堂无码z2018| 欧美午夜一区二区三区| 久久久久国产无av| 五月婷婷大香蕉| 亚 欧 美 综合| 天天干2019| 国产精品国产自产拍高清AV| 人妻插插人妻人| 精品国产一区二区三区久久久蜜臀| 91在线免费观看处女| 久久久99久9| 黄网站黄视频网站进入口| 蜜臀久久久| 嫩草 我啊~嗯~在线| 欧美手机在线综合| juliaann欧美丝袜办公室| 久久超碰网| 日韩性爱一级片| 欧美性生活免费网| 九月色婷婷| 亚洲一二三精品久久网| 欧美韩日精品资源| 国产成人五月天丁香花| 网站A V在线| 美女午夜福利免费视频| 亚洲1区| 超碰在线974| 射丝袜大香蕉| 久久国产乱子伦精品免费女,网站| 91久久青青草原精品| 伊人一区二区在线播放| 我要看免费韩日黄片| 性站| 中文字幕精品专区搜索结果91| 成人性交午夜免费片| 老熟女乱伦片| 少妇超碰在线| 欧美高潮| 亚洲码在线中文在线观看| aaaa少妇高潮大片| 久久25| 国产精品一区二区麻豆| 啪啪性爱免费视频| 欧美黄页在线| 99最新日韩偷拍视频| www国产无码| 日美免费黄片| 超碰人妻中文在线| 九热久| 性爱乱伦网址| 一区二区三区四区久久视1| 欧美色干| 岛国艾薇凹凸视频天堂| 亚洲熟女综合| 综合伊人网12色| 色色色欧美| 欧美传媒一区| 免费自拍三级综合| 欧美黄色图片| 精品人妻一区二区免费蜜桃视频| 激情看片网站| 激情内射| 日美免费黄片| 欧美日韩亚洲电影| 丰满人妻一区二区三区四区| 五十路熟女工口| 中文字幕天堂在线| 久久国产精品一级二级三级| 欧美色97| 丁香五月自拍| 玖色av| 加勒比久久综合网高清| 久久亚码| 国产www色在线观看| 91最新综合| 综合久久97| 91N欧美| 爱爱啊啊啊| 天天欧美欧美亚洲网| 中文字幕成人乱码熟女精品国50| www狠狠| 国产又粗又长视频| 国产999精品久久久久久| 天天干人妻视频| 被体育老师抱着c到高潮| 91人妻久久久久久久久久久久久| 国产日韩在线播放av| 精品网站99999| 性久久久| 青青伊人这里只有精品| 国产精品99久久久www| 激情视频图片| 黑操B| 中文乱码字字幕在线第5页| 91N五十路| 综合伊人激情| 青青草成人视频在线观看二区| 天天操夜夜操狠很操| 丁香五月天久久精品视频一区二区三区| 欧美A片中文字幕| 久久精9| 51一区二区三区| 国产美女高潮视频| 久草视频制服诱惑| 国产一区二区精品久久99| 91日日夜夜| 天天干天天拍| 亚洲密乳AV| ...日韩成人一区二区三区字幕| 午夜精品久久久久久久99蜜桃一| 9Ⅰ超碰| 中文字幕天天操| 国产精品探花在线| 亚洲激情视频| 日韩天天本| 人人爱操| 日本三级一区二区 在线| 亚洲欧美天| 久久久工口| α√在线| 84YTCOM性无码| 国产乱子伦一区二区三区免看| 丁香婷婷久久 | 国产精品久久久无码AV网站| 久久粉色| 欧美亚洲成人在线一区二区三区| 91久久久久久| 天天色天天干天天射| 91老司机视频| 中文字幕久久亚州无码| 色综合天天| 国产av波波国产精品| 一区二区影视| 日本天堂在线播放| 青青草精品| 人妻加勒比东京热| 欧美成人黄网色网站| 在线视频亚洲无码| 91N综合网| 1024手机看片欧美日韩| 久久久工口| 99操碰| 色嗨嗨在线| 日韩激情无码影院| 97欧美日韩| 97中文综合| 骚人妻少妇视频| 粘花网06av视频| 久久人妻精品| 丁香五月激情啪啪| 久久精品国产72国产精品福利 | julia高潮后不停追击中出| 午夜电影在线观看无码专区| 亚洲无码国产探花在线观看| 亚洲天堂2020| 999热这里只有精品| 日日日日做夜夜夜夜做无码97| 综合亚洲情色| 精品无人区麻豆乱码久久久| 97视频观看| 色综合天天| 日产123区精品免费观看| 奸色色 男人天堂 天天射| AV九九| 亚洲1区| 超碰久热| 婷婷五月综合激情| 蜜臀久久99精品久久久久久久久| 九九久久精品| 国产亚洲一黄| 在线观看十八禁| 97视频在线免费看| 天天爽夜夜欢视| 久久夜夜夜夜| 伊人久久亚洲中文字幕不卡| 97在线观看免费视频l| 啊啊啊啊二区好大| 伊人色综合欧美| 亚洲日韩少妇一道本视频| 人妻黑丝袜电影| 欧美高清在线| 九九热re99re6在线精品| 伊色久人大在线| 999精品乱码| 国产精品女aA片爽爽视频| 东北少妇高潮zzzz| 丁香九月 婷婷| 看黄片视频免费| 日韩性爱播放| 国产精品91一样| 神马午夜久久久| 夜夜免费视频| 97亚洲在线| 日韩激情电影中文字幕| jk白丝没脱就开始啪啪| 久久 国产精品 一区| 97色五月天完| 91天天c| 久久精品国产97欧美精品亚洲 | 色香色欲天天综合网天天来吧| 久操精品网| 啊啊啊啊啊啊在线看| 天天操人人操骚逼网站| 青青草大香蕉视频| 男女猛烈无遮掩视频免费软件| 日本女优在线视频福利| 五月天偷拍| 亚洲情色图片区| 欧美久久人体| 性久久久| 狠狠干综合| 自拍欧美| 亚洲在线欧美| 午夜福利免费精品视频| 精品99999久久久久久| 久久久专区| 久久久久久久性爱| 日本一区二区成人在线| 德国一二三不卡| 色欧美色交综合| 五月天婷婷在线看| 久久婷婷影院| 久久超碰av在线| 日韩性爱啪啪视频| 久久女婷| 国模久久在线| 日韩免费高清大片在线| 天天做天天爱天天高潮| 亚洲综合图片在线| 日产欧美电影一区二区三区| 97在线精品| 东京热99999| 久久午夜鲁丝片| 99亚亚热| 怡红院成人视频| 秋霞影音一区二区三区| 黄色不卡视频| 搡老女人911熟妇老熟女| 99色在线视频| 就去色综合| 人人操人人摸人| 欧美91网站| 级做a爱无码性色永久免费| 志村玲子视频一区二区| 久久久无码精品人妻二区| 国产日产精品久久快鸭的功能介绍| 精精夜夜| 婷婷超| 999日韩中文精品观看视频。| 夜夜嗨一区二区三区三州加勒比| 一区二区三区成人高清视频| 1区2区3区中文字幕日韩| 九九九久久久| 亚州操操穴网| 中文字幕国产在线天堂| 一区久久久二区| 家庭乱伦麻豆| 欧洲中文字幕| 麻豆视频国产一区二区| 校园春色欧美色图| 岛国片在线视频网站| 超碰97男人| 久久精品国产99精品亚洲蜜...| 综合日韩激情另类图片| 91久久免费视频互動交流| 很黄很污的免费网站| 国产偷拍网站| 久久久国产精品人妻丝袜| 亚洲国产精品成人综合| 美女AV一区二区| 亚洲AV秘 精品久久老牛影视| 久9久精品视频| 精品在线观看视频在线| 成人情色综合网| 色综合天天| 凹凸精品熟女在线观看| av操操不卡| 国产精品一区av在线| 欧美最大综合网| 色99视频| 性久久久| daxiangjiao你懂的| 五月天社区| 青娱乐淫乱1314| 怡红院成人av| 91一起操| 国产超碰AV在线精品| 熟妇国产免费一区| 99欧美| 久久久精品中文字幕爱豆| 97超碰资源网| 婷婷激情五月综合| 天天插夜夜操| 中文三一区| 国产夫妻一区二区| 99久久精品国产高潮| 国产精品96久久久久久| 日本大香蕉| 九九性视频| 为用户提供免费看黄网址在线观看| 天天天操天天天爱| 欧美色偷拍 | 一区久久久二区| 成人午夜小视频手机在线看| 青娱乐啪啪视频| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师 | 嫖老熟女A片一二三区| 久久免费少妇| 怡红院亚洲怡春院av| 800zy一区二区| 男人的天堂一区三区| 网友自拍第一页| 9.1小视频| 亚洲 欧美 另类 日韩 人妻一区| 婷婷久久久| 日韩丰满熟妇| 亚州熟女乱伦| 亚洲欧美黄| 亚洲AV不卡在线观看| 九九九九88| 99热精品在线播放| 日韩探花精品在线视频| 日本中文熟女视频| 啊啊啊啊好爽好舒服一区二区易域| 国产成人主播| 成人精品电影| 嗯嗯啊啊视频在线看| 少妇xx精品| 久久受www免费人成| 久操免费观看| 九久久九九久视频| 久操av在线| 2019午夜福利视频| 91国产美女丝袜足交精品视频| 欧美黄页在线| 大香樵伊人网| 天天日天天插| 丁香六月啪| 黄片直播三级黄片两女一男| 亚洲 一区二区 自拍| 成人97人人超碰人人| 亚洲伊人久久综合97| 91w欧美| 久操97| 少妇精品久久| 91夜色| 女人综合网| 试看60秒 爽| 欧亚日韩一区在线| 欧美综合网在线| 蜜臀久久99精品久久久| 天天色欧美| 啊啊啊啊啊啊好多水| 操东北女人| 亚洲一区二区在线观看91| 亚洲欧美999| 97在线免费| 日韩欧无码一区二区三区免费不卡| 蜜臀久久99精品久久久久久婷婷| 91精品导航| 欧姜老司机| 蜜臀视频网站| 国产精品一区二区a| 欧美夜夜草视频| 国产男女边吃边摸视频网站| 亚洲欧美在线观看无码| 国产网站在线播放| 日韩av乱伦| 日韩免费人妻色情网站| 91暧暧| av东京热男人的天堂| 亚洲黄色网址| 成年在线视频日本亚洲在线视频区精品江靖宇公司 | 激情小说亚洲| 天天狠操| 久久精品色欧美aⅴ一区二区| 99性视频| 九九九久千久久激情蜜桃在线看 | 影音先锋国产精品| 欧美嫩性色| 亚洲欧洲久久天堂| 亚洲情色无码一区二区三区| 99re黄 | 久久精品老司| 热热色综合网| 在线日韩精品一区二区三区| 香蕉久久AⅤ...| 欧美日综合| 亚洲网自拍| 中文字幕av片| 伊人热综合| 秋霞一级视频在线观看免费| 91久精品| 欧美一品道| 久久九色| 天天色综亚洲91污| 欧插网站| 欧美日韩人妻精品一区二区三区| 亚洲天堂久久久久久粉红视频| 日韩无码a片| 国产11页| 久久影视二区三区行押| 亚洲精品久久久久毛片A片拉屎 | 日本不卡二三区| 天天欧美| 欧美日韩国产高清在线一二三区| 男人天堂2012| www久久精品| 精品日韩人妻视频| 丁香五月天激情综合| 一区二区三区四区久久视1| 91 综合网| 欧美日韩国产高清在线一二三区| 97超级久久强资源| com 首页 18岁 禁区 女优 免费 精选 同城| 另类图片综合| 99色在线| 天天干1区2区在线| 99亚洲精品| 超碰 97国产熟女| 麻豆一区二区三区在线看| 精品久久久久久中文字幕三区| 久久九九99| 997色在线| 物业黑人 AV一区| 成人国产视频在线观看| 色色国产| 夜夜夜爽www精品视频| 欧美黄片免费在线观看视频| oumeisetupian| 欧美日韩中文视频播放| 九九久久精品| 黄色交缠性感爆操91国产精品免费一区二区三区| 欧美传媒| 亚洲色欲一区二区三区| 欧美天天综合| 920日本午夜免费| 精品国产乱码久久久A| 久久久九九网站| 青青青草原| 人人操人人摸人| 免费97视频| 人妻在线视频| 福利天天都操| 日本黄 R色 成 人网站| 激情文学小说一区二区| 怡红院一区二区熟女人妻| 亚洲资源网| 国产乱人伦AVA麻豆软件.| 老女人老91妇女老热女| 艹精品| 视频在线中文字幕| 亚洲女毛多水多21P| 日韩 女同 综合| 亚洲精品美女久久久久久久久| 伊人少妇久久久| 黑人黄片在线免费观看| 欧美日韩国产精品久久色婷婷| 国产懂色精品国产av| 中文字幕精品专区搜索结果91| 偷拍自拍在线视频观看| 欧美线天码中字| 五月婷婷影院| 日韩免费中文字幕视频| 久久111| 成人a大片在线观看| 国桃视频产巨乳精品一区二区在线| 美女一区二区国产精品| chaopen97久久| 狠狠狠狠狠狠| jizz啪啪| 91影视亚洲| 大香蕉婷婷| 午夜小电影在线插入淫高潮| 色大师网站www永久网站视频| 久久人人爽爽人人爽人人片αV| 97超碰总站| 色综合久| 74成人在线| 茄子社区国产精品| 日本在线一二| Av手机版天堂网| 丝袜加勒比| 中文字幕艹艹| 少妇3P性爱自拍| 欧洲人妻视频| 日韩不卡码| 九月婷婷综合| 日本高清免费一本视频在线观看| 老鸭窝日丰县女人| 丰满人妻一区二区三区四| 中文字幕国产| 欧美天天综合网版| 校园春色亚洲无码| 又大又白奶子| 国产精品婬乱一级毛片彝族| 91爱网| 综合久久99亚洲人妻中文在线| 久热伊人| 天天操人人操狠狠插| 91n处女在线观看| 久久偷拍人| 久久人妻视频网| 狠狠操夜夜| 国内外内射高清视频| 超碰97导航| 国产盗摄美女如厕大神作品在线观看 | 97久久资源| 国产黄色av大片网站| 成人av性爱电影在线观看| 高清无码学生妹高潮| 欧美熟妇操操视频| 精品 码产区一区二-1080P高清在线www-B029AV| 人人贴人人摸| 欧美日韩97| 亚洲日本大香蕉1| 黄色不卡视频| 九九精品美女高溯喷水| 九九人人操| 97欧美性爱| 在线观看无码三级少妇| 女人天堂av在线播放| 午夜福利一区二区三区四区五区色婷婷| 嗯啊不要啊啊在线观看视频| 啪啪综合网| 日韩乱伦视频| 国产精品自在线发布| 免费久久一级毛片大黄| 色综合av综合久久| 亚洲色交| 色约约一区=区三区| 后入式五六区| 欧洲亚洲人人爽爽视频| 久久伊人青青草| 国产精品午夜成人福利| 亚洲。日韩。欧美| 国产超碰国产97| 亚洲综合五月天婷婷丁香| 极品尤物在线观看| 影音先锋中文字幕日本好一区二区| 亚洲日本激情| 免费观看性欧美一级| 久久成人国产精品| 午夜男女爽爽爽影院视频| 欧美人体性爱互联网第一页婷婷日本| 91高清欧美| 欧洲精品二区| 特色a在线上| 97免费在线观看| 麻豆天美一区二区| 亚洲性网| 国产精品人妻一区二区| 中国操逼无码| 亚洲日本激情| 精品亚洲一区在线观看| 9久热这里只有精品| 天天干,天天日| 精品高清一区二区三区三州| 青娱乐福利99| 亚洲影院成人| 国产多人在线观看视频| 1级黄色夫妻对换性交免费看| 夜夜操美女| 日韩免费在线视频观看| 中文字幕精品一区二区精| 青娱乐亚洲自拍| 中文字幕精品资源在线| 91色婷婷综合久久中文字幕二区| 五月丁香婷婷色| 伊人天堂在线| 人人综合| 久久久久久久久久久久欧美日| 天天情欲宗合网| 欧美九九九| 国产9区| 操屄日韩| 深夜国产一区二区三区在线看| 国语av最新自产拍在线观看| 综合激情婷婷| 欧美人妻二区三区| 老司机久久| 国产又粗又长的视频| 亚洲欧美另类小说| 色哟哟综合| 国产aⅴ无码片毛片一级网站| 国产精品99久久久www| 日韩欧美视频青青| 伊人一区二区三区| 久久超碰天天| 日韩精品中文字幕人妻| 熟女精品va中文字幕| www.91色综合| 天堂射| 无码人妻一区二区三区四区老鸭窝| 国产精品又黄又猛又粗| 一区二区三区精品视频| 91丝袜美腿网站| 亚洲熟妇白浆无码AV| 欧美色女人| 温婉少妇玩3p| 日本天天吊| 4虎在线视频| 日本精品一级二级三级| 午夜理论片在线观看免费| 日韩精品一区二区三区四虎影视| 久久中出在线| 欧美性夜| 久久国产性爱| 九九热免费国产视频婷婷伊人| 日本中文字幕一区| 天美精品原创av片国产| 国产小视频91| 操逼内射干逼白丝91| 精品国产乱码久久久| 淫荡少妇免费| 亚熟在线| 欧美日韩久久精品爱爱| 91快色色色色色| 嗯嗯啊啊用力视频免费| 日韩欧视频| 郑州宾馆老熟女露脸啪啪| 日本三级小说中文字幕| 午夜福利合集| 国产91精品福利在线| 5252色欧美在线| 美女久久久久久久久久久| 日韩人妻 中文字幕| 国产美女精品| 中文AV制服乱伦| 精品久久久久久亚洲| 亚洲成人在线乱码色午夜| 国产精品无码av在线| 女人一区| 操国产逼| 久久国色天香香蕉| 日韩小电影| 日日夜夜干| 九九操久久国产免费视频| 2021久久国产综合精品青草| 97 国产一区| 日本成熟少妇A∨网站| 天堂av2019| 亚洲综合在线第一页| 五月婷婷丁香六月| 成人三级片一区二区三区视频| 日韩欧美午夜视频在线| 校园春色亚洲无码| 欧美色性爱| 亚洲国产丝袜在线观看| 日韩亚洲中文有码视频| 亚州色图欧美| 国产 日韩 欧美高清| 色九九九九| 日韩av不卡在线看| 白丝在线一区| 1024人妻熟女一区二区三区| 亚洲天堂美臀在线| 國產尤物AV尤物在線觀看| 久久99草| 久久久久久久国产a∨| 伊人久久亚洲色欲综合网站| 精品性爱一二三区| www.acm成人黄色毛片| 日本黄 R色 成 人网站| 欧美亚洲今日在线| 青青草原人妻| 日韩偷拍一区二区三区| 手机久操欧美综合色码| 亚洲国产一区二区入口| 97精品中文字幕| 熟女视频久久| 中文字幕乱亚洲美女精品一区| 91N欧美| 国产精品99精品视频网站| 91久久堂| 极品尤物在线观看| 超碰在线一区二区三区| 日欧美色| 秋霞无码av鲁丝片一区| 性欧美第一页| 欧美精品成人亚洲| 色就色综合| 国产精品另类一区大香蕉| 国产av尤物| 免费一级性爱久久| 天天综合91入口| 偷窥自拍亚洲色图| 成人性爱av.com| 国语精品av| 91亚洲影院综合| 欧美午夜一区二区三区| 五月天伊人网| 久久 亚洲 日韩 人妻| 乱伦系列一区二区| 九九九久久久| 黄久在线| 欧美日日网| 333kkkk·亚洲com久久| 精品福利| av草草在线电影| 色综合中文字幕不卡| 免费伦费视频在线观看| 人妻少妇精品| 男人的天堂日韩| 天天淫人人妻日日色| 日本性爱不卡视频| 五月丁香黄色网| 成人开心网在线视频| 麻豆天美传媒在线视频天堂| 欧美丰满熟妇XXXX性ppX人交| 沈阳熟女高潮对白视频| 好湿好紧视频| 少妇三P| 日本一区三级韩国| α√在线| 強姦亂倫a| 男人的天堂va| 爱丝福利| 欧美97日韩精品| 花野真衣| 97人人模人人爽人人| 伊人久久综合影院| 日韩av无码网站| 久久伊人东京热| 欧美第一页| www.高清无码诱惑一区.com | 熟女丰满人妻一区| 日韩AV熟女乱伦| 秋霞久久亚洲精品成人| 天天看夜夜看日日干| 高清视频一区| 骚货操死你| 2003天天干夜夜操| 亚州男人的天堂| 国产乱码精品久久久久久| 久久这里精品国产99丫e6| 欧美后进式| 性爱久久| 五月婷婷色色| 欧美综合区| 亚洲欧洲日韩国产自在线| 日韩无码三级影院| 精品无码一区二区三区| 欧美色欧美| 91无遮挡| 久久久96| 91日韩| 色99999| 91综合在线| 日韩三级伊人| 91天天| 91精品国产91久久青草| 囯产精品久久久久久久久久二区三区| 久久精品国产亚洲粉嫩| 风间由美日韩欧美久久| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | TS人妖另类精品视频系列| 91一区二匹| 中文字幕后石码三区四区| 97爱综合| 免费AV中文网在线观看| 搡老熟女免费视频| 国产亚洲精品精AV.| 中文字幕一区二区三区字幕| 欧美五十路熟| av无码av无码专区| 麻豆啪啪啪视频| 肥臀熟女福利视频一区二区| 啊啊啊爽爽| 久久无码精品|