c 輸出字元陣列亂碼 c 輸出中文亂碼解決方案

2021-10-19 15:35:09 字數 1078 閱讀 1858

問題的原因應該在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 //可以引入system("pause")來實現程式的暫停

using namespace std;//引入命名空間std,使得std::cout和std::endl可以直接省去std::

intmain()

system("chcp 65001");return 0;

這樣有一點我覺得不好的是會顯示執行chcp這條命令的返回文字,不太好看

3.使用setconsoleoutputcp

#include //用於函式setconsoleoutputcp(65001);更改cmd編碼為utf8

using namespace std;//引入命名空間std,使得std::cout和std::endl可以直接省去std::

intmain()

setconsoleoutputcp(65001);return 0;

4.使用舊版控制台

在使用上述1、2、3的設定後雖然可以輸出在源**裡定義好的中文字元,但是在用cin讓使用者輸入時,卻不能正確輸出使用者輸入的中文字元。

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

5.追根溯源的終極原因

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

c 中文輸出亂碼解決

今天給人寫個很簡單的整理資料的小程式,一開始用python寫。寫完想起對面沒有環境,轉回c 寫完輸出中文的時候直接自閉。c 對不同編碼的支援是真的菜.查了乙個下午,配了各種環境,結果發現沒有哪個庫把這個內容給封裝得很好,最後還是靠csdn的 解決的問題。把查到的 放這裡,方便以後再利用。感謝 踏莎行...

C 中分割字串輸出字元陣列

1 用字串分隔 using system.text.regularexpressions string str aaajsbbbjsccc string sarray regex.split str,js regexoptions.ignorecase foreach string i in sar...

c 中輸出字元的位址

struct test int main 輸出結果 為什麼用cout輸出字元的位址出來是亂碼呢?看下面這段 int main 這裡s是這個字串的首位址,看到這裡應該明白為什麼上面要求輸出位址卻輸出亂碼。c 裡用cout輸出乙個字元的位址,輸出的結果是從該字元開始的乙個字串的內容 struct tes...