用jasoncpp決議json遇到個別字就決議不了了,parsedOk 回傳false。
AnsiString sJson = “xxxxxx”;
Json::Reader reader;
Json::Value json_Value;
bool parsedOk = reader.parse(sJson.c_str(),json_Value);
if(!parsedOk)
{
}
不能決議的文字串列:
乗 俓 僜 刓 匼 哱 圽 塡 奬 媆 峔 嶾 廫 慭 怽 揬 昞 朶 梊 榎 橽 歕 沑 漒 瀄 焅 燶 猏 玕 琝 甛 璡 痋 盶 癨 瞈 砛 碶 穃 竆 筡
篭 糪 絓 綷 縗 繺 羂 耚 肻 腬 臶 臷 芢 蒤 薥 蚛 蝄 蟎 衆 蟎 裓
覾 譢 豛 赲 踈 躙 輁 郳 醆 鈂 鉢 鎈 鏫 閈 闬 隲 頫 颸 餦 馶 骪
鯸 鮘 鳿 鵟 鸤 黒 齖
uj5u.com熱心網友回復:
AnsiString 改成 UnicodeStringjson 確實麻煩的事, 或者可能要使用字串解碼器 TEncoding
uj5u.com熱心網友回復:
JasonCpp 在處理 UTF-8 編碼的字串的時候是沒有問題的,由于 ANSI 編碼太過復雜,缺點太多,很多函式處理都會出錯,JasonCpp 無法處理 AnsiString 是可以理解的。用 UTF8String 代替 AnsiString,字串一律用 UNICODE 就沒問題了,避免任何地方都不要有 ANSI 出現,字串常數也要寫成 L"" 這樣的 UNICODE 字串。
UTF8String sJson = L“xxxxxx”;
UTF8String 和 UnicodeString 之間可以直接互相賦值
UTF8String 和 std::string 之間可以直接互相賦值
std::string 和 UnicodeString 之間需要用 UTF8String 中轉
wchar_t * wchar_t *
↘ ↙↗
std::string ←→ UTF8String ←→ UnicodeString
↗ ↖
L"字串" L"字串"
按照這個規則,這里的 std::string 和 UTF8String 如果和 char* 互相轉換,就是 UTF-8 編碼的,沒有 ANSI
uj5u.com熱心網友回復:
wchar_t * wchar_t *
↘ ↙↗
std::string ←→ UTF8String ←→ UnicodeString
↗ ↖
L"字串" L"字串"
uj5u.com熱心網友回復:
按照這個規則,這里的 std::string 和 UTF8String 都是 UTF-8 編碼的,沒有 ANSI,如果把 std::string 和 char * 之間轉換,把 UTF8String 和 char * 之間轉換,都是 UTF-8 編碼的。程式里面一旦出現 ANSI 編碼,就會出錯。uj5u.com熱心網友回復:
謝謝各位大大的指點,我看了解釋我也明白了,但是有個問題,這個jsoncpp引數格式都固定死了的,我改了的話編譯不過去,只能改jsoncpp的原始碼,但是本人能力有限可能做不到這些,我就想問問,是不是這就是jsoncpp的一個bug,我怎么能簡單一點解決這個問題。c++builder里面好像決議json的就只能用這個jsoncpp。
uj5u.com熱心網友回復:
能在C++ Builder里決議JSON的庫有很多,但能編碼的就比較少。其中比較方便好用的就是JSONCPP,但它肯定不是速度最快的。另外CB本身也帶了一個JSON的編碼解碼庫。uj5u.com熱心網友回復:
jsoncpp 可以參考這個程式,支持 UNICODE 的,世界各國語言都支持,不僅僅是漢字。http://www.cppfans.com/sdk/json/jsoncpp.asp
uj5u.com熱心網友回復:
那最終傳入傳出的都是 UnicodeString 了uj5u.com熱心網友回復:
我沒碰到樓主的問題啊,用樓主的代碼測驗也沒問題i啊?uj5u.com熱心網友回復:
額,的確有問題,剛看錯了uj5u.com熱心網友回復:
String ss="乗 俓 僜 刓 匼 哱 圽 塡 奬 媆 峔 嶾 廫 慭 怽 揬 昞 朶 梊 榎 橽 歕 沑 漒 瀄 焅 燶 猏 玕 琝 甛 璡 痋 盶 癨 瞈 砛 碶 穃 竆 筡";root["firstName"] = AnsiString(ss).c_str();
Json::StyledWriter styled_writer;
int l=styled_writer.write(root).length();
char *s1 = new char[1024];
memset(s1, 0, 1024);
strncpy(s1, styled_writer.write(root).c_str(),l);
// 決議
Json::Reader reader;
Json::Value json_object;
if (!reader.parse(s1, json_object))
ShowMessage("error");
else
ShowMessage(json_object["firstName"].asString().c_str());
以上代碼測驗通過,bcb2010
uj5u.com熱心網友回復:
具體怎么用呢?
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/97302.html
標籤:網絡及通訊開發
上一篇:做稀疏表示的時候,怎么設定字典?
下一篇:求問一下幾個概念的差別,頭檔案,庫檔案和類以及類別庫的區別,還有后綴是dll,".o",".obj",".h"檔案的區別,謝謝!
