在c語言中讀取json文件時,如果文件中有中文內容,常常會出現亂碼的情況。下面我們來介紹如何解決這個問題。
// 讀取json文件 FILE* fp = fopen("test.json", "r"); if (!fp) { printf("文件不存在\n"); return -1; } // 獲取文件大小 fseek(fp, 0, SEEK_END); int size = ftell(fp); fseek(fp, 0, SEEK_SET); // 分配內存空間 char* buffer = (char*)malloc(size + 1); if (!buffer) { printf("內存分配失敗\n"); fclose(fp); return -1; } // 讀取文件內容到緩沖區 fread(buffer, size, 1, fp); buffer[size] = '\0'; fclose(fp);
在上述代碼中,我們使用了fread函數將文件內容讀取到了緩沖區中,但是由于緩沖區里的中文字符可能會出現亂碼,接下來我們需要對緩沖區中的數據進行處理。
// 設置locale setlocale(LC_ALL, ""); // 將緩沖區中的數據轉換為UTF-8編碼 wchar_t* wc_buffer = (wchar_t*)malloc((size + 1) * sizeof(wchar_t)); if (!wc_buffer) { printf("內存分配失敗\n"); free(buffer); return -1; } if (mbstowcs(wc_buffer, buffer, size + 1) == -1) { printf("mbstowcs失敗\n"); free(buffer); free(wc_buffer); return -1; } // 輸出轉換后的內容 wprintf(L"%ls", wc_buffer);
在上述代碼中,我們使用了setlocale函數來設置程序的本地環境,使得程序能夠正確地處理多種語言的字符。然后,我們使用mbstowcs函數將緩沖區中的數據轉換為寬字符編碼,再利用wprintf函數輸出轉換后的內容。
通過上述兩段代碼的處理,我們就能夠正確地讀取包含中文內容的json文件了。
上一篇c 讀json 參數