在進行C語言接收JSON數(shù)據(jù)時,有時候會發(fā)生中文亂碼的情況,下面介紹一些解決方法。
首先,判斷所使用的編碼方式和JSON數(shù)據(jù)編碼方式是否一致,如果不一致,就需要進行編碼轉(zhuǎn)換。可以使用iconv庫進行轉(zhuǎn)換,代碼示例:
#include <iconv.h> #include <string.h> char *convertEncoding(char *src, const char *from, const char *to) { iconv_t cd; char *outbuf; size_t inlen = strlen(src); size_t outlen = inlen * 4; outbuf = (char *) malloc(outlen); memset(outbuf, 0, outlen); cd = iconv_open(to, from); iconv(cd, &src, &inlen, &outbuf, &outlen); iconv_close(cd); return outbuf; }
接下來,對JSON數(shù)據(jù)進行解析。可以使用第三方庫cJSON進行解析,cJSON使用起來非常簡單,代碼示例:
#include <cJSON.h> void parseJson(char *jsonData) { cJSON *root = cJSON_Parse(jsonData); cJSON *name = cJSON_GetObjectItem(root, "name"); printf("%s\n", name->valuestring); cJSON_Delete(root); }
但是如果JSON數(shù)據(jù)中包含了中文,還需要對中文進行解碼。可以使用第三方庫Jansson進行解碼,Jansson同樣使用起來非常簡單,代碼示例:
#include <jansson.h> void decodeJson(char *jsonData) { json_t *root; json_error_t error; root = json_loads(jsonData, 0, &error); json_t *name = json_object_get(root, "name"); char *name_str = json_string_value(name); printf("%s\n", name_str); json_decref(root); }
以上就是解決C語言接收JSON數(shù)據(jù)中文亂碼的方法。