在使用C++讀取JSON格式數據時,有時會出現中文亂碼情況。這主要是因為JSON格式文件中文使用的是Unicode編碼,而C++默認使用的是ANSI編碼。
解決這個問題的方法就是將讀取的JSON字符串轉換成WideChar類型,然后再使用寬字符輸出函數輸出。示例代碼如下:
#include <iostream> #include <string> #include <rapidjson/document.h> #include <rapidjson/istreamwrapper.h> #include <codecvt> using namespace std; using namespace rapidjson; int main() { wcout.imbue(locale("chs")); wcout << L"測試中文輸出" << endl; // 讀取文件 wifstream ifs("test.json"); ifs.imbue(locale(locale::empty(), new codecvt_utf8)); // 將文件內容轉換成WideChar類型 wstring json_str((istreambuf_iterator (ifs)), istreambuf_iterator ()); // 解析JSON wstring_convert >conv; wstring json_utf8 = conv.to_bytes(json_str); Document d; d.Parse(json_utf8.c_str()); // 輸出中文內容 wstring title = d[L"title"].GetString(); wcout << title << endl; return 0; }
首先,我們需要將輸出流imbue到包含中文的區域。然后打開JSON文件,并將文件內容轉換成WideChar類型。接著,使用Wstring_convert將WideChar類型轉換成UTF-8編碼,最后再使用rapidjson解析JSON,輸出中文內容。
這樣,我們就可以正確讀取JSON文件中的中文了。
上一篇vue npm配置路由