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

c 接收json中文亂碼

林子帆2年前7瀏覽0評論

在C語言中,我們經常需要處理JSON格式的數據,其中包含了中文字符。但是,當我們使用C語言接收JSON數據時,可能會遇到中文亂碼的問題。那么,該如何解決呢?

// 示例代碼
int main(){
char *json_str = "{\"name\": \"張三\", \"age\": 18}";
cJSON *json = cJSON_Parse(json_str);
if (json) {
cJSON *name = cJSON_GetObjectItemCaseSensitive(json, "name");
printf("%s\n", name->valuestring);
cJSON_Delete(json);
} else {
printf("error\n");
}
return 0;
}

在上述代碼中,我們使用了cJSON庫來處理JSON數據。但當我們運行程序,輸出結果為“姹傚瓧”,而不是“張三”。這是因為我們沒有正確地處理JSON數據中的中文字符。

解決方法如下:

#includechar *utf82gbk(const char *src) {
iconv_t conv = iconv_open("GBK", "UTF-8");
const size_t inbytesleft = strlen(src);
size_t outbytesleft = inbytesleft * 2;
char *const outbuf = malloc(outbytesleft);
char *outp = outbuf;
const char *inbuf = src;
size_t ret = iconv(conv, &inbuf, &inbytesleft, &outp, &outbytesleft);
if (ret == (size_t) -1) {
printf("iconv error: %s\n", strerror(errno));
free(outbuf);
return NULL;
}
if (iconv_close(conv) == -1) {
printf("iconv_close error: %s\n", strerror(errno));
free(outbuf);
return NULL;
}
*outp = '\0';
return outbuf;
}
int main(){
char *json_str = "{\"name\": \"張三\", \"age\": 18}";
char *gbk_str = utf82gbk(json_str);
cJSON *json = cJSON_Parse(gbk_str);
if (json) {
cJSON *name = cJSON_GetObjectItemCaseSensitive(json, "name");
printf("%s\n", name->valuestring);
cJSON_Delete(json);
} else {
printf("error\n");
}
free(gbk_str);
return 0;
}

在代碼中我們添加了一個函數utf82gbk來將UTF-8編碼的字符串轉換成GBK編碼的字符串。這樣,我們就可以正確地讀取JSON數據中的中文字符。