在網上下載,或者移植別人的代碼到自己的電腦,使用VS運行后,控制臺輸出中文可能出現亂碼。這是因為源代碼的編碼格式和控制臺的編碼格式不一致。
文章目錄
- 查看源代碼文件編碼格式
- 查看輸出控制臺編碼格式
- 修改編碼格式
- 修改終端代碼頁
- 補充
- 總結
查看源代碼文件編碼格式
打開項目文件夾,找到源代碼文件,右擊,打開方式選擇「記事本」。在右下角會發現有一個編碼格式的說明。常見的就是GB18030
和 UTF-8
兩種情況,GB是國標的縮寫。
在記事本中點擊另存為可以更改編碼格式,這里不做贅述。
查看輸出控制臺編碼格式
打開cmd命令行,會跳出控制臺輸出窗口,或者稱作「終端」。
但是Visual Studio 通常使用的不是cmd窗口,因此我們需要編譯運行我們的源文件。
右擊控制臺窗口(不是黑框),點擊屬性。
會跳出窗口的屬性,在選項中,會有一個當前代碼頁。
其中,65001 表示UTF-8編碼,936表示GB18030的編碼。
修改編碼格式
修改源文件的編碼格式,最基本的方法就是上述提到的,在記事本中「另存為」,即可修改。
不過,源文件通常情況下很多,所以我們一般修改的是終端的編碼。下面介紹下如何修改終端代碼頁,也就是編碼格式。
修改終端代碼頁
方法一: 在代碼的main程序中,可添加一段設定控制臺編碼的代碼。
如果是C++,則可以使用:
SetConsoleOutputCP(CP_UTF8); // 輸出編碼設定SetConsoleCP(CP_UTF8); // 輸入編碼設定
如果是C#,可以用這個:
// 設置控制臺輸入輸出編碼為UTF-8Console.OutputEncoding = Encoding.UTF8;Console.InputEncoding = Encoding.UTF8;
方法二: 可提前在終端窗口的命令行提示符中,使用cmd命令修改編碼。但是這種修改是暫時的,下一次打開,又得重新修改。
chcp 65001
既然可以通過命令行修改,那么我們則可以在寫的程序中調用命令行,就無需手動修改。
調用系統命令的方法如下:
// C++
system("chcp 65001 > nul"); // 隱藏命令輸出
// C#
System.Diagnostics.Process.Start("cmd.exe", "/c chcp 65001 > nul");
方法三: 修改注冊表
修改注冊表可以永久設置控制臺窗口的編碼格式。
- 按 Win+R 輸入 regedit,打開注冊表編輯器。
- 找到路徑:
計算機\HKEY_CURRENT_USER\Console
- 找到Visual Studio 的
console.exe
,修改codePage即可。注意需切換到十進制,65001 才表示UTF-8編碼,936 表示GB18030。
同樣的,這個方法三 ,修改system32_cmd.exe ,則修改的是cmd窗口的編碼格式,也是修改codepage即可。
「方法三」修改一次,后續則一直沿用設置,此外,寫代碼的時候,建議使用「方法一」,在代碼中就把終端編碼設置與源代碼文件一致,這樣可以保證放在其他電腦也不會出現亂碼。
補充
VS的輸出終端通常使用的是VS自帶的控制臺窗口,有的電腦安裝了VS,但是在修改注冊表時,在Console中,可能沒有找到VS相關的 console.exe
。
我們依舊打開注冊表,找到這個路徑:
計算機\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor
右擊新建 => 字符串值。這個時候,再找到之前說的Console路徑,就會發現出現了與Visual Studio相關的控制臺窗口了,修改codepage即可。
此外,這里列舉一些與終端編碼格式相關的cmd命令,在命令行窗口中可使用:
查看編碼格式代碼:
chcp
修改編碼格式為UTF8:
chcp 65001
除了使用記事本,還可以如何查看源文件編碼格式?可以通過VScode,sublime 等編輯器打開,都可以看到源文件的編碼。如果偏偏想用Visual Studio打開源文件,且查看編碼格式的話,可以在擴展管理器中搜索FileEncoding 安裝使用。這樣,用VS打開可以在右下角隨時查看,并且每次寫代碼之前也可提前修改好編碼格式,再開始寫代碼。
總結
通過修改注冊表可以永久修改終端的編碼格式,而如果想保險一點,可以在寫代碼時,就設定好終端控制臺的編碼格式。但除非代碼需要移植,在我們自己的電腦上,自己寫程序+編譯運行,一般是不會出現亂碼的,所以很少代碼會有設定終端編碼的習慣。