------------------------------------------------------這一段爲基礎科普,可跳過---------------------------------
Windows
系統下,文件默認是以WINDOWS-936
方式編碼保存的,即GBK
編碼。如果你打開帶有中文字符的文件出現中文亂碼,說明你打開文件的編碼方法與保存時候的編碼方案不一致,有可能你是以UTF-8
方案打開WINDOWS-936
方式編碼保存的文件或者其他不一致的情況。我們可以測試一下:
我們可以看到,當文件保存時的編碼方案與文件打開時的編碼方案一直時,就不會出現中文亂碼的情況。那麼當兩者出現不一致的情況時會怎樣呢?比如我們將ANSI
方式保存的文件改爲用UTF-8
方式打開時會怎樣呢?我們可以繼續測試一下:
當用ANSI
方式顯示ANSI
方式保存的情況爲:
當用UTF-8
方式顯示ANSI
方式保存的情況爲:
----------------------------------------------------這裏有一條很長的分割線------------------------------------------------
基於以上科普,我們回到CodeBlocks
中的中文亂碼問題出現的原因及尋求解決方案:
在默認情況下,CodeBlocks
只有當文件的編碼方案爲WINDOWS-936
時才能夠進行中文的正常編譯。經驗總結,我也不知道爲什麼。
這與網上其他教程不同,這只是我的個人經驗之談,自己親測有效。對於網上一些教程所說的修改編譯器的編碼方式與編輯器的編碼方式一致即可,我全部設爲utf-8
還有gdk
,反正最後解決不了我的問題,於是纔有了這篇總結。
比如你從網上下載了一個C文件,它原本使用UTF-8
編碼保存的,但是你不知道,你只知道用本地CodeBlocks
打開後正常顯示(事實上CodeBlocks
可以讀取其編碼方式並正常打開,所以顯示的內容纔沒有出現亂碼),但編譯運行時出現了中文亂碼。你只要將該文件的編碼方案在軟件中設置爲WINDOWS-936
即可。如果再次編譯之後發現有中文亂碼,隨便剪切一行代碼然後粘貼回去,主要是要有改動文件的行爲即可。
可能出現的問題
1.爲什麼引入的帶有文件路徑頭文件顯示正常,但編譯時控制檯顯示該路徑的中文亂碼?
在確保你的CodeBlocks
的編碼方案爲WINDOWS-936
後,並且你當前文件打開的編碼方式爲WINDOWS-936
且正常顯示的情況下:
隨便剪切一行後重新粘貼即可,主要就是要有文件改動。
出現這種情況是因爲你改動了文件的編碼方案,即便最後改回來了,但由於改動編碼方案之前已經編譯過一次了,可能是編譯過程頭文件的鏈接問題導致的修改不能及時生效吧(瞎猜的)