一樣,使用的是VS FOR LINUX進行測試。html
converting to execution character set: Invalid or incomplete multibyte or wide characterlinux
若是編譯時候遇到該錯誤,則能夠加上-finput-charset
-fexecute-charset
g++編譯選項解決。由於linux下gcc但願源文件是UTF-8格式,因此都改爲UTF-8就行了。同時,也能夠vs下裝個forceUTF8插件。ide
搜了下,網上有說使用wprintf的,好比:函數
wchar_t c= L'中國';
wprintf(L"%c",c);測試
wprintf(L"%ls\n", L"中華人民共和國");編碼
測試的時候發現wprintf沒有打印任何東西。spa
有說使用locale loc("chs");的:.net
locale loc("chs");插件
wcout.imbue( loc );debug
也有說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。
上述設置後,環境中就是指定的字符集了,可是vs監視窗口仍然會是顯示16進制,以下:
經查帖子https://blog.csdn.net/lainegates/article/details/72236321,將C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Packages\Debugger\Visualizers\stl.natvis的
將文件583-586行改成以下:
<DisplayString Condition="_Mypair._Myval2._Myres < _Mypair._Myval2._BUF_SIZE">{_Mypair._Myval2._Bx._Buf,s8}</DisplayString> <DisplayString Condition="_Mypair._Myval2._Myres >= _Mypair._Myval2._BUF_SIZE">{_Mypair._Myval2._Bx._Ptr,s8}</DisplayString> <StringView Condition="_Mypair._Myval2._Myres < _Mypair._Myval2._BUF_SIZE">_Mypair._Myval2._Bx._Buf,s8</StringView> <StringView Condition="_Mypair._Myval2._Myres >= _Mypair._Myval2._BUF_SIZE">_Mypair._Myval2._Bx._Ptr,s8</StringView>
以後,vs2015便可在debug時正常顯示utf-8字符。TODO
還有個帖子說,「只須要將要顯示的字符串拉到Watch中,並在變量後面添加,s8便可顯示」,經測,這麼作是不行的,監視窗口會報錯,以下:
參考:
https://blog.csdn.net/wangsen_sc/article/details/6915995
https://blog.csdn.net/weiwangchao_/article/details/43453053
https://blog.csdn.net/angelxf/article/details/7803495
http://www.cplusplus.com/reference/cstdio/printf/(關鍵時候看官方手冊)