vscode gcc 執行 C++ 中文亂碼解決
tags: 部落格文章
亂碼原因
其實就只是出在編碼的轉亂過程中沒有正確的被設置而已,這邊還會引申出另一個問題「許功蓋問題」都是相同原因導致的。
導致亂碼的原因
其實最主要的是中間隔了一層gcc,很多人沒注意到gcc是可以決定輸入的編碼和輸出編碼的。
這邊先順一下總共有4層,每一層編碼都要一致才能正確地顯示。
- 檔案編碼 (預設big5)
- gcc輸入設置 (預設utf8)
- gcc輸出設置 (預設utf8)
- windows編碼設置 (繁體系統-預設big5)
檔案編碼
檔案編碼是最好解的,直接從VS的右下角可以看到當前是什麼
點擊一下可以看到兩個選項
- 當你打開一份big5的檔案,但是VS卻錯誤判斷成utf8開啟,就會發生亂碼,這時候只要[重新以big5開啟]即可
- 當你打開一份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
沒有留言:
張貼留言