Windows平臺CC++ Console程式使用UTF8編碼需要設定的五個地方

在windows中使用visual studio編譯C/C++ Console程式時,如果想統一採用utf8編碼,需要注意以下幾個地方的設定,如果出現中文亂碼,應從這幾個方面來查詢原因。為了編碼在各平臺的統一,推薦使用codepage 65001,即帶bom簽名的utf-8編碼格式,這種編碼的檔案開頭有3個位元組,內容為EF BB BF,其次才是檔案的正文。

第一個是儲存原始碼檔案使用的編碼,儲存檔案的時候另存為65001的utf8編碼即可。

第二個是visual studio使用的編譯器生成exe檔案時使用的編碼,在visual studio的專案屬性 -> 配置屬性 -> c/c++ -> 命令列 -> 其它選項 中填寫 /utf-8

微軟在此有說明文件:

https://docs。microsoft。com/en-us/cpp/build/reference/execution-charset-set-execution-character-set?view=msvc-170&viewFallbackFrom=vs-2019

第三個是執行exe時所在的終端支援顯示utf8編碼的文字,透過在程式開頭設定終端的編碼實現:system(“CHCP 65001”);

第四個是設定程式的locale為utf8,這將決定程式與 windows api 互動時採用的文字編碼,比如讀取檔名稱時採用的編碼 :

#include

setlocale(LC_ALL, “。UTF8”);

第五個是終端使用的字型必須支援所需字元的顯示,比如英文版的windows系統終端的字型可能不支援中文的顯示,這時可透過右擊終端標題欄,properties - font 來檢視,如果選中的字型不支援中文,可透過修改登錄檔來使該字型支援中文字元。修改登錄檔的方法如下:

將以下內容儲存在一個txt檔案中,儲存時選擇unicode或者utf16 LE編碼(注意:不能選擇其它編碼,因為windows系統是以uft16 LE為native編碼),然後將txt檔案重新命名為set_font_yahei。reg,然後雙擊改該檔案修改登錄檔,然後重啟電腦讓修改生效。

——————-檔案內容——————————-

Windows Registry Editor Version 5。00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console\TrueTypeFont]

“0”=“Lucida Console”

“00”=“Consolas”

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console\RasterFonts]

“微軟雅黑”=“msyh。ttc”

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontLink\SystemLink]

“Consolas”=hex(7):4d,00,53,00,59,00,48,00,2e,00,54,00,54,00,43,00,2c,00,ae,5f,\

6f,8f,c5,96,d1,9e,2c,00,31,00,32,00,38,00,2c,00,38,00,30,00,00,00,00,00

————————————————————