我們?cè)赪indows使用VSCode編寫(xiě)C/C++程序時(shí),如果代碼中的中文字符串使用的是UTF8編碼,且代碼內(nèi)沒(méi)有設(shè)置控制臺(tái)的輸出編碼,或者編譯時(shí)沒(méi)有指定運(yùn)行時(shí)編碼(GCC可以在編譯時(shí)使用-fexec-charset=GBK
來(lái)指定運(yùn)行時(shí)的字符串編碼;clang目前只能是utf-8),則在調(diào)試或者運(yùn)行時(shí),VSCode控制臺(tái)輸出的中文字符可能會(huì)為亂碼。
目前VSCode中微軟官方出品的cppdbg
引擎已經(jīng)是可以正常輸出UTF-8字符,不管是使用gdb
還是lldb
。不過(guò)cppdbg
引擎使用lldb
調(diào)試器時(shí),不是直接調(diào)用的LLDB API
,而是使用的lldb-mi
,lldb-mi
項(xiàng)目已經(jīng)很久沒(méi)人維護(hù)了,基本上處于停滯狀態(tài)。如果想要使用lldb
調(diào)試器,可以使用CodeLLDB
插件,不過(guò)該插件是直接使用的Windows的控制臺(tái),Windows控制臺(tái)默認(rèn)是使用的GBK編碼,代碼輸出UTF8編碼的字符串就會(huì)出現(xiàn)亂碼。
為了一勞永逸地解決VSCode中控制臺(tái)輸出UTF8字符串時(shí)亂碼的問(wèn)題,可以在settings.json
中添加如下配置:
"terminal.integrated.profiles.windows": {
"Command Prompt": {
"path": [
"${env:windir}\\Sysnative\\cmd.exe",
"${env:windir}\\System32\\cmd.exe"
],
// CodeLLDB插件,打開(kāi)此項(xiàng)解決中文輸出亂碼問(wèn)題
"args": ["/K", "chcp 65001>nul"],
"icon": "terminal-cmd"
}
}
即在cmd命令行后添加/K chcp 65001>nul
或者/K chcp 65001
,這樣VSCode中啟動(dòng)的控制臺(tái)全部會(huì)使用UTF8編碼輸出。
注意:這樣配置后,會(huì)有點(diǎn)沖突的是,如果配置了shell
類(lèi)型的任務(wù),則會(huì)報(bào)錯(cuò):
參數(shù)格式不正確 - /d
比如在tasks.json
中配置如下任務(wù):
{
"version": "2.0.0",
"tasks": [
{
"label": "echo",
"type": "shell",
"command": "echo Hello"
}
]
}
VSCode實(shí)際執(zhí)行的指令為:C:\Windows\System32\cmd.exe '/K chcp 65001>nul /d /c echo Hello'
上述cmd命令參數(shù)含義如下:文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-816794.html
此時(shí)需要關(guān)閉前面配置的/K
參數(shù)。在使用Makefile Tools
插件編譯C/C++項(xiàng)目時(shí),也需要關(guān)閉/K
參數(shù)。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-816794.html
到了這里,關(guān)于解決Windows下VSCode控制臺(tái)亂碼問(wèn)題的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!