中文亂碼的原因:
1. 中文在不同編碼格式下, 存儲的方式不一樣.
2. 如果程序是A編碼方式編譯運行的,但是控制台卻是以B編碼方式來顯示, 就會出現亂碼.
3. vs的控制台默認編碼是GB2312,編號號是836
注意:GBK編碼是兼容GB2312的,一般描述GBK常常就是指BG2312
如果源代碼文件的編碼如果是其他編碼格式, 就會導致中文亂碼.
正常場景:
在vs中新建文件時,該文件默認都是GB2312編碼.
因為控制台默認也是GB2312編碼,所以一般情況下,都不會出現中文亂碼.
錯誤場景:
1. 直接在項目中導入了其他已經創建好的源代碼文件,
如果該文件不是BG2312編碼, 而且含有中文的話, 就必定會出現中文亂碼.
2. 從其他文件中復制代碼到vs的文件中, 也可能導致編碼錯亂.
3. 網絡編程中, 和服務器交互通信, 兩端的編碼很可能不同.
我們的”黑客攻擊系統”的服務端木馬, 就是UTF-8編碼格式的.
解決方案一: 修改文件的編碼
修改源代碼文件的”編碼格式”, 使其和控制台的編碼格式保持一致.
控制台的編碼格式默認是936
代碼文件的編碼格式,可以通過vs很方便的修改:
先用vs打開對應的文件, 然后如下操作:
如果控制台的編碼和程序的編碼一致,還是有中文亂碼,就需要修改控制台的屬性,
右擊控制台標題欄,選擇“屬性”,勾選“使用舊版控制台”
然后再重新運行。
解決方案二: 強制指定文件執行
不修改文件的編碼, 而是直接指定程序執行時使用的編碼, 使其和運行程序的控制台的編碼一致.
#pragma execution_character_set("gbk") |
解決方案三: 修改控制台的編碼格式
修改vs控制台的編碼, 使其和源代碼的編碼保持一致.
修改注冊表, 可以修改控制台的編碼格式.
注意:
不建議使用該方式.
因為, 把控制台的默認編碼改為其他編碼后, 在該控制台輸入中文, 很可能導致輸入的中文無法識別.
在vs2010中存在該問題.
解決方案四: 對數據進行編碼轉換
適用於: 服務器端和客戶端, 或多個客戶端之間的編碼不一致時.
1) 收到對方的其他編碼數據時, 先使用特定的接口來進行編碼轉換.
發送本地數據給對方之前, 先使用特定的接口來進行編碼轉換.