色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

c json中文 亂碼問題

方一強2年前8瀏覽0評論

在使用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編碼,這樣就避免了中文亂碼問題。