在C語言中讀取JSON文件時,遇到中文字符出現亂碼的問題是很普遍的。這里提供一種解決方案,使用utf-8編碼打開文件,并使用第三方庫 cJSON 來解析JSON。
#include <stdio.h> #include <cJSON.h> int main(void) { FILE *fp = fopen("data.json", "r"); if (!fp) { printf("Failed to open file."); return 1; } // 設置utf-8編碼 setlocale(LC_ALL, "en_US.UTF-8"); // 獲取文件大小 fseek(fp, 0, SEEK_END); long fsize = ftell(fp); fseek(fp, 0, SEEK_SET); // 讀取文件內容 char *content = malloc(fsize + 1); fread(content, fsize, 1, fp); fclose(fp); // 解析JSON cJSON *json = cJSON_Parse(content); cJSON *name = cJSON_GetObjectItem(json, "name"); printf("%s\n", name->valuestring); // 釋放資源 cJSON_Delete(json); free(content); return 0; }
在上面的代碼中,我們首先打開JSON文件,并讀取文件內容。為了避免中文亂碼問題,我們使用 setlocale 函數設置了 utf-8 編碼。然后使用 cJSON_Parse 函數解析 JSON 內容。在獲取 JSON 中文字段時,我們使用 cJSON_GetObjectItem 函數。
需要注意的是,在使用 cJSON_GetObjectItem 函數獲取 JSON 中文字段時,字段名必須是 ASCII 編碼,不能使用中文,否則會出現亂碼。同時,在使用 cJSON_Parse 函數解析 JSON 時,cJSON 庫會自動將 JSON 中的字符串編碼轉換為 UTF-8 格式,因此我們不需要額外處理中文亂碼。