問題的緣由應該在cmd的編碼和c++程序編碼(源文件編碼)的不一樣。cmd默認的是gbk編碼,而我用的vs code默認是utf-8編碼,於是在輸出中文文本時會出現亂碼。html
但我也遇到了一個比較怪異的狀況,就是cmd和cpp文件編碼都是gbk的狀況下輸出中文依然會亂碼,可是當輸出的文本第一個字符是英文或者空格的時候就不亂碼了,這個問題依然沒有解決,搜索的時候發現有人也遇到過,但也不知道怎麼解決的。c++
因此解決方案就是所有用utf-8編碼(搜索到的還有什麼local、wcout、字符寬度、L" "什麼的,可是沒太看懂)windows
chcp 65001
而後再在命令行裏啓動程序。這種修改cmd編碼的方式只能持續到此次命令行程序關閉爲止。函數
#include <cstdlib>//能夠引入system("pause")來實現程序的暫停 using namespace std;//引入命名空間std,使得std::cout和std::endl能夠直接省去std:: int main() { system("chcp 65001"); return 0; }
這樣有一點我以爲很差的是會顯示執行chcp這條命令的返回文本,不太好看編碼
#include <windows.h>//用於函數SetConsoleOutputCP(65001);更改cmd編碼爲utf8 using namespace std;//引入命名空間std,使得std::cout和std::endl能夠直接省去std:: int main() { SetConsoleOutputCP(65001); return 0; }
在使用上述一、二、3的設置後雖然能夠輸出在源代碼裏定義好的中文字符,可是在用cin讓用戶輸入時,卻不能正確輸出用戶輸入的中文字符。spa
在cmd的屬性頁面勾選使用舊版控制檯後解決了上述全部的問題。(雖然不想扔鍋給cmd,但這麼看來,好像仍是cmd的鍋命令行
終於,在我遇到這個問題後的四個月後,上次由於這個問題詢問過的同窗也遇到了這個問題。在同窗地努力探索下,終於找到了緣由是什麼。code
直接放他的文章連接了:mingw控制檯中文亂碼htm