在使用C語言進行JSON數據處理時,中文亂碼問題是比較普遍的問題。下面我們就來探討一下這個問題的解決方法。
// 例子1:輸出中文亂碼 #include <stdio.h> #include <string.h> #include <stdlib.h> #include <json-c/json.h> int main() { char* json_str = "{\"name\":\"小明\",\"age\":18}"; struct json_object *obj = json_tokener_parse(json_str); printf("姓名:%s,年齡:%d\n", json_object_get_string(json_object_object_get(obj, "name")), json_object_get_int(json_object_object_get(obj, "age"))); return 0; }
運行上述程序可以看到,輸出的姓名為“угЖ”,這就是常見的中文亂碼問題。那么該如何解決呢?
// 例子2:解決中文亂碼問題 #include <stdio.h> #include <string.h> #include <stdlib.h> #include <json-c/json.h> int main() { char* json_str = "{\"name\":\"小明\",\"age\":18}"; struct json_object *obj = json_tokener_parse(json_str); const char *name = json_object_get_string(json_object_object_get(obj, "name")); int age = json_object_get_int(json_object_object_get(obj, "age")); int name_len = strlen(name) + 1; char name_utf8[name_len*4]; memset(name_utf8, 0, name_len*4); // 將中文轉換成UTF-8編碼 iconv_t cd = iconv_open("UTF-8", "GBK"); char *inbuf = (char*)name; char *outbuf = name_utf8; size_t inlen = name_len; size_t outlen = name_len*4; iconv(cd, &inbuf, &inlen, &outbuf, &outlen); iconv_close(cd); printf("姓名:%s,年齡:%d\n", name_utf8, age); return 0; }
上面的例子中,我們通過引入iconv庫,使用iconv函數將中文轉換成UTF-8編碼,這樣就避免了中文亂碼問題。
上一篇html必選框的代碼
下一篇vue屬于靜態頁面