1. 程式人生 > 實用技巧 >解決VS2019預設用GBK編碼導致輸出中文亂碼的問題

解決VS2019預設用GBK編碼導致輸出中文亂碼的問題

前言

其實網上關於解決這個問題的部落格已經有很多了,但是我嘗試了很多方法之後都或多或少有不滿意的地方,終於自己也摸索出了一套自我感覺相對完美的解決方案,因此發出來供後人參考。

正文

經過查閱資料和自己摸索嘗試後,我總結了下解決用VS寫的程式碼中的中文提交後會亂碼的方法。 這個問題的原因在於評測環境和VS的編碼不一致,VS預設是以GBK編碼程式碼檔案,而評測環境是UTF-8編碼,因此本地寫好的程式碼交上去後會在評測機中亂碼,所以解決方法就是把VS的編碼改為UTF8。 網上的操作大概有這麼幾種:

  1. 在檔案-高階儲存選項中改編碼為UTF-8。這個方法的缺點是隻能一個一個檔案改,而且新建的檔案依然預設是GBK編碼,因此並不方便。並且在VS2019中,高階儲存選項的入口被藏的很深,還需要想辦法在檢視欄中調出來,因此不推薦。
  2. 安裝一個名為Force UTF-8(No BOM)的外掛(UTF8有BOM和No BOM兩種,為了更好的相容性,我建議使用No BOM的),這樣新建的檔案在儲存時都會轉換成UTF8編碼儲存。這個外掛很小,只有9kB,因此我建議使用此方法。
    在這裡插入圖片描述

至此,問題的第一階段解決了,從而確保了我們在本地寫的程式碼在其他平臺上執行不會亂碼。但是另一個問題出現了,那就是VS控制檯裡輸出中文的時候會亂碼,這個雖然不影響在其他平臺上的輸出結果,但是對於我們本地除錯來說還是或多或少有些不方便。

這個問題同樣是編碼不一致引起的,VS控制檯的預設編碼也是GBK,所以識別UTF8編碼的中文就會亂碼,因此我們需要改VS控制檯的編碼。

網上的教程主要是這些解決方法:

  1. 通過改登錄檔來改cmd powershell的預設編碼,但是我在自己的電腦上嘗試的過程中遇到的問題有:找不到cmd的登錄檔項;改了powershell的預設編碼後,開啟VS控制檯發現依然是GBK編碼。
  2. 在時鐘-區域中開啟全域性Unicode編碼,但是這個方法副作用不小,雖然控制檯不亂碼了,但是一些其他的軟體可能會亂碼。例如,我用7zip開啟一個壓縮包,裡面的中文資料夾名變成了亂碼。

後來我發現其實VS控制檯在登錄檔中也有條目,具體路徑如圖(我的VS的安裝路徑是D:\Software\VisualStudio,在登錄檔中的名稱可能會因為安裝路徑的不同而有所不同,但是最後一定以是VsDebugConsole.exe結尾的)

注:也有人反映登錄檔中找不到VS控制檯的登錄檔項,對於這種情況我無能為力,如果有知道怎麼解決的朋友歡迎補充。
在這裡插入圖片描述

修改的步驟如下(有不明白的步驟可參考上圖):

  1. 按下win+r,輸出regedit,開啟登錄檔編輯器
  2. 在登錄檔編輯器中開啟路徑HKEY_CURRENT_USER\Console
  3. 選中名字中有VsDebugConsole.exe的那個資料夾
  4. 開啟CodePage,修改其值為十進位制的65001(即UTF8編碼),如果沒有CodePage這項,就自己右鍵新建一個DWORD型別的值,名為CodePage,值為十進位制的65001
  5. 儲存(無需重啟電腦,會立即生效)

如果一切正常的話,此時我們嘗試用VS執行程式碼,中文應該可以正常顯示了,在VS控制檯的視窗標題處右鍵-屬性,開啟選項頁,可以看到當前內碼表為65001,表示修改成功,從此,在VS裡建立的程式碼和開啟的控制檯都會預設用UTF-8編碼,亂碼的問題就較完美的解決了。
在這裡插入圖片描述