在使用C語(yǔ)言進(jìn)行JSON輸出時(shí),很可能會(huì)出現(xiàn)中文亂碼的問(wèn)題。這是由于C語(yǔ)言中使用的是ASCII編碼,而中文字符則需要使用UTF-8編碼。因此,如果JSON中包含中文字符,需要進(jìn)行相應(yīng)的編碼轉(zhuǎn)換。
#include "json.h" #include "utf8_int.h" #include "string.h" #include "stdio.h" void output_json_string(json_string_t *s) { char *buf = NULL; buf = (char*)malloc(s->len + 1); utf8_int32_t unicode_buf[s->len]; memcpy(buf, s->ptr, s->len); buf[s->len] = '\0'; utf8_to_unicode(buf, unicode_buf); printf("\""); for (int i = 0; i< s->len; i++) { printf("\\u%04X", unicode_buf[i]); } printf("\""); free(buf); } int main() { json_value_t *root = json_new_object(0); json_object_append(root, "name", json_new_string("張三")); json_object_append(root, "age", json_new_number(20)); char *output = json_stringify(root, NULL); printf("JSON Output: %s\n", output); json_free_value(root); free(output); return 0; }
上述代碼中使用了utf8_int.h中的utf8_to_unicode函數(shù),將UTF-8編碼轉(zhuǎn)換為Unicode編碼。同時(shí),在輸出JSON字符串時(shí),根據(jù)Unicode編碼進(jìn)行轉(zhuǎn)義。這樣就可以避免中文亂碼的問(wèn)題。