c++輸出中文亂碼解決方案

問題的緣由應該在cmd的編碼和c++程序編碼(源文件編碼)的不一樣。cmd默認的是gbk編碼,而我用的vs code默認是utf-8編碼,於是在輸出中文文本時會出現亂碼。html

但我也遇到了一個比較怪異的狀況,就是cmd和cpp文件編碼都是gbk的狀況下輸出中文依然會亂碼,可是當輸出的文本第一個字符是英文或者空格的時候就不亂碼了,這個問題依然沒有解決,搜索的時候發現有人也遇到過,但也不知道怎麼解決的。c++

因此解決方案就是所有用utf-8編碼(搜索到的還有什麼local、wcout、字符寬度、L"  "什麼的,可是沒太看懂)windows

1.在cmd裏先運行命令

chcp 65001

而後再在命令行裏啓動程序。這種修改cmd編碼的方式只能持續到此次命令行程序關閉爲止。函數

2.或者在c++源代碼裏更改cmd編碼

#include <cstdlib>//能夠引入system("pause")來實現程序的暫停
using namespace std;//引入命名空間std,使得std::cout和std::endl能夠直接省去std::
int main()
{
    system("chcp 65001");
    return 0;
}

 這樣有一點我以爲很差的是會顯示執行chcp這條命令的返回文本,不太好看編碼

3.使用SetConsoleOutputCP

#include <windows.h>//用於函數SetConsoleOutputCP(65001);更改cmd編碼爲utf8
using namespace std;//引入命名空間std,使得std::cout和std::endl能夠直接省去std::

int main()
{
    SetConsoleOutputCP(65001);
    return 0;
}

4.使用舊版控制檯

在使用上述一、二、3的設置後雖然能夠輸出在源代碼裏定義好的中文字符,可是在用cin讓用戶輸入時,卻不能正確輸出用戶輸入的中文字符。spa

在cmd的屬性頁面勾選使用舊版控制檯後解決了上述全部的問題。(雖然不想扔鍋給cmd,但這麼看來,好像仍是cmd的鍋命令行

5.追根溯源的終極緣由

終於,在我遇到這個問題後的四個月後,上次由於這個問題詢問過的同窗也遇到了這個問題。在同窗地努力探索下,終於找到了緣由是什麼。code

直接放他的文章連接了:mingw控制檯中文亂碼htm

相關文章
相關標籤/搜索