2021年8月29日 星期日

VSCode gcc 執行時中文亂碼解決

vscode gcc 執行 C++ 中文亂碼解決

tags: 部落格文章

亂碼原因

其實就只是出在編碼的轉亂過程中沒有正確的被設置而已,這邊還會引申出另一個問題「許功蓋問題」都是相同原因導致的。

導致亂碼的原因

其實最主要的是中間隔了一層gcc,很多人沒注意到gcc是可以決定輸入的編碼和輸出編碼的。

這邊先順一下總共有4層,每一層編碼都要一致才能正確地顯示。

  1. 檔案編碼 (預設big5)
  2. gcc輸入設置 (預設utf8)
  3. gcc輸出設置 (預設utf8)
  4. windows編碼設置 (繁體系統-預設big5)

檔案編碼

檔案編碼是最好解的,直接從VS的右下角可以看到當前是什麼


點擊一下可以看到兩個選項


  1. 當你打開一份big5的檔案,但是VS卻錯誤判斷成utf8開啟,就會發生亂碼,這時候只要[重新以big5開啟]即可
  2. 當你打開一份big5的檔案,想把檔案編碼轉換成utf8的時候,這時候[以utf8編碼儲存]即可

用哪個編碼都可以沒有好壞,考慮到繁體Windwos預設就是big5,國內環境直接使用big5會帶來很大的便利性。
但是如果你的客戶包含海外用戶,那使用big5就會帶來災難了。所以網頁代碼一律用utf8才是最省事的。

ggc設置

其實這才是卡到大家bug亂碼的根源,關鍵在於它的預設值是utf8導致災難。

這個設置還不只是有一個輸出輸入各一個,所謂的許功蓋問題就從這裡的,檔案是big5但是gcc預設用utf8讀,這編碼不匹配就出問題了。

不知道為什麼早期的文章沒人意識到其實有選項可以調,所以結論就變成必須得用uft8了。

這邊提供一下選項,有兩個一個是讀取,一個執行。

# 設置原始程式檔案之編碼為 big5 (忽略不打預設是utf8)
-finput-charset=big5
# 設定執行時之編碼方式為 big5 (忽略不打預設是utf8)
-fexec-charset=big5

這邊選項1依據你的文檔是什麼格式做調整就好,如果是utf8格式的文檔直接刪除即可,預設就用utf8讀取。

下面兩個範例

# 原始檔編碼為utf8 (預設就是utf8直接省略)
gcc a.cpp -fexec-charset=big5

# 原始檔編碼為big5
gcc a.cpp -finput-charset=big5 -fexec-charset=big5

「設定執行之編碼方式」只能是 big5 這個別想了沒得改,這裡的編碼並不是網路上寫的終端機的編碼,是系統內部的。

windows編碼設置

這個其實網路上很多文章有寫要調整powershell或cmd的編碼,其實跟那邊無關。

真正的設定值在這裡



但是我不建議改動這裡,到時候會變成你打開別的程式是亂碼。只要這裡不改上面的指令2就一定得打

為什麼玩日文遊戲要特別用第三方程式轉換問題也是出在這裡,光是改系統語言並不會改變編碼。

【解決方法2】現在win10也解決這個問題了,編碼那裏點進去有個實驗功能,「使用UTF8提供全球語言支持」把他打勾之後,直接什麼什麼煩惱都沒有,就能正確顯示中文了。只是會有什麼代價還不清楚,我是沒打算這樣改就是了。


最後回到vscode

好啦關鍵那兩個指令拉,把他加入你的joson檔案裡gcc指令後面就可以解決了。

參考

http://kailotus.blogspot.com/2018/10/c06c-vscode-cvscode.html

沒有留言:

張貼留言