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


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

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

所以解決方案就是全部用utf-8編碼(搜索到的還有什么local、wcout、字符寬度、L"  "什么的,但是沒太看懂)

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.使用舊版控制台

在使用上述1、2、3的設置后雖然可以輸出在源代碼里定義好的中文字符,但是在用cin讓用戶輸入時,卻不能正確輸出用戶輸入的中文字符。

在cmd的屬性頁面勾選使用舊版控制台后解決了上述所有的問題。(雖然不想扔鍋給cmd,但這么看來,好像還是cmd的鍋

5.追根溯源的終極原因

終於,在我遇到這個問題后的四個月后,上次因為這個問題詢問過的同學也遇到了這個問題。在同學地努力探索下,終於找到了原因是什么。

直接放他的文章鏈接了:mingw控制台中文亂碼


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM