CodeBlocks 輸出漢字變亂碼或問號, 編輯器與編譯器的參數設置


算起來,使用 CodeBlocks 也有幾年了,但對其了解只能算是皮毛,很多事情都是一知半解,沒有搞清楚。

平時沒遇到問題,也就沒想去研究。

最近遇到一個很奇怪的問題,輸出四個漢字其中一個變成問號。 

白 單鞋   (注意:第一個漢字是 , 而不是)

其中,第一個漢字在輸出的時候變成了問號,這什么情況,幾年來還是第一次遇到。

下面,我簡單的寫了一個測試程序:

const char *pszText = "3";
printf("len:%d\n", strlen(pszText));

printf("pszText:'%s'\n", pszText);

輸出的結果:

len:2
pszText:'?'

很明顯,結果不符合預期。

我又測試了一下黑:

const char *pszText = "3";
printf("len:%d\n", strlen(pszText));

printf("pszText:'%s'\n", pszText);

輸出的結果:

len:3
pszText:'黑3'

這又正常了,很明顯,我當前的編程環境並不是所有的漢字在輸出時都變成問號,並且這幾年來我的程序在輸出漢字的時候沒遇到過這種問題,直到今天遇到這個漢字:

百度了一下后,找到這么幾篇關於使用 CodeBlocks 中文變亂碼的說明:

https://www.cnblogs.com/didiaodidiao/p/9189463.html

https://www.cnblogs.com/myfreedom614/archive/2012/04/10/2441173.html

 

根據上面鏈接的文章提示,以及我測試的情況來看,由於幾年來我寫了幾個項目,由於源代碼使用的是 windows-936,也不想再重新修改源代碼的編碼格式的情況下,適合我的 CodeBlocks 的配置環境應該是:

 CodeBlocks 的【全局編譯器設置】中,【其他編譯器設置】中添加兩行設置:

-finput-charset=gbk
-fexec-charset=gbk

---------------------------------------------------------------------

-finput-charset:用來指定輸入源文件的的字符編碼

-fexec-charset:輸出的exe文件的字符編碼集 (指定多字節字符串(const char *)常量在編譯后的程序里保存的編碼集)

注意:如果將 fexec-charset 設置為 utf-8,Linux 默認會認為執行環境是 utf-8,而 windows 下並不是,所以Linux下沒問題,因為Linux就是 utf-8,但是 windows 下必然出現亂碼。

---------------------------------------------------------------------

經過我的電腦測試:

 

-finput-charset=gbk
-fexec-charset=gbk

-finput-charset=windows-936
-fexec-charset=windows-936

效果都一樣,都能解決正常輸出 黒 這個漢字。

---------------------------------------------------------------------

 

 

后記:

如果從一開始,在我沒有編寫任何項目的情況下,我會把源代碼編碼默認使用 utf-8,那么 CodeBlocks 的配置環境應該是:

1. CodeBlocks 的編輯器設置中,【編碼設置】應選擇: utf-8,至於【設為默認的編碼方式 (忽略 C::B 自動檢測)】這一選項是否必須勾選,我不確定。

2. CodeBlocks 的【全局編譯器設置】中,【其他編譯器設置】中添加兩行設置:

-finput-charset=utf-8
-fexec-charset=gbk

---------------------------------------------------------------------

-finput-charset:用來指定輸入源文件的的字符編碼

-fexec-charset:輸出的exe文件的字符編碼集 (指定多字節字符串(const char *)常量在編譯后的程序里保存的編碼集)

---------------------------------------------------------------------

 

 

---------------------------------------------------------------------

查看當前操作系統的代碼頁(Code Page):dos 下輸入 chcp,可輸出代碼頁信息。

關於代碼頁(Code Page)的詳細介紹: https://www.cnblogs.com/benbenalin/p/6911781.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM