標籤:locale wan details 編譯選項 tps 編譯 [] ring 調試
同樣,使用的是VS FOR LINUX進行測試。
converting to execution character set: Invalid or incomplete multibyte or wide character
如果編譯時間候遇到該錯誤,則可以加上-finput-charset -fexecute-charset g++編譯選項解決。因為linux下gcc希望源檔案是UTF-8格式,所以都改成UTF-8就好了。同時,也可以vs下裝個forceUTF8外掛程式。
搜了下,網上有說使用wprintf的,比如:
wchar_t c= L‘中國‘;
wprintf(L"%c",c);
wprintf(L"%ls\n", L"中華人民共和國");
測試的時候發現wprintf沒有列印任何東西。
有說使用locale loc("chs");的:
locale loc("chs");
wcout.imbue( loc );
也有說setlocale( LC_CTYPE,"chs");的
使用chs編碼,運行時就報異常了,難道都沒測過嗎???
最後還是自己逐個調試解決了。如下:
setlocale(LC_ALL, "zh_CN.UTF-8");wchar_t zh_cn = L‘國‘;wchar_t zh_cns[] = L"中國";wchar_t another_w[sizeof(zh_cns)/sizeof(wchar_t)] = {0};wcscpy(another_w, zh_cns);printf("%ls。。。....%ls。。。%lc\n", zh_cns, another_w,zh_cn);
加上-finput-charset -fexecute-charset g++編譯選項或者在VS中把檔案設定為UTF-8帶簽名格式即可。
輸出:
中國。。。....中國。。。國
最後,寬字元的操作函數和char不同,常用的可以參考http://www.cnblogs.com/lidabo/p/6912788.html。
參考:
6915995
43453053
7803495
http://www.cplusplus.com/reference/cstdio/printf/(關鍵時候看官方手冊)
c++ linux下輸出中文