中文讨論Windows環境下Qt Creator控制台輸出中文亂碼的解決辦法。
知識産權協定
允許以教育/教育訓練為目的向學生或閱聽人進行免費引用,展示或者講述,無須取得作者同意。 不允許以電子/紙質出版為目的進行摘抄或改編。 |
1. 開發環境
中文Windows 10 64bit, Qt Creator 4.11.0, mingw 7.3.0 64 bit
2. 故障現象
Plain C/C++ Application在控制台輸出中文時出現亂碼。
程式如下:
//Project - EarthTime
#include <stdio.h>
#include <time.h>
int main() {
time_t t;
time(&t); //擷取目前時間,從1970年1月1日零時起經過的秒數
long long totalSeconds = (long long)t; //總秒數轉換為long long類型
long long curSecond = totalSeconds % 60; //目前秒數 = 總秒數對60取餘
long long totalMinutes = totalSeconds / 60; //總分鐘 = 總秒數除60
long long curMinute = totalMinutes % 60; //目前分鐘 = 總分鐘對60取餘
long long totalHours = totalMinutes / 60; //總小時 = 總分鐘除60
long long curHour = totalHours % 24; //目前小時 = 總小時對24取餘
printf("格林尼治時間 %lld 時 %lld 分 %lld 秒,1970年1月1日零時到現在經過了 %lld 秒.",
curHour,curMinute,curSecond,totalSeconds);
/* printf的英文版本
printf("%lld:%lld:%lld, %lld seconds after 1970/1/1 00:00::00",
curHour,curMinute,curSecond,totalSeconds);
*/
return 0;
}
其執行結果包含亂碼:
3. 解決方案images
選擇工具->選項菜單
在文本編輯器-顯示中勾選 Display file encoding
右上角點UTF-8,彈出的對話框中選擇System,選“按編碼儲存”。
儲存之後,右上角顯示的目前編碼變為System.
再次編譯執行,問題解決。
4. 後記
問題事實上沒有完全解決,下次再打開項目時,Qt Creator會以UTF-8讀入事實上由System編碼的檔案,連源代碼都會出現亂碼。此時,可以通過按System編碼讀入來解決。
請讀者不必糾正,大多數的應用開發,都是圖形界面,控制台應用極少,控制台裡還要使用中文的應用就更少了。
通過将整體開發環境的檔案編碼設定為System,或可解決問題。但作者不推薦這麼做, 因為事實上,UTF-8是更通用的編碼,它允許在同一個應用程式裡同時顯示多國文字。
本案例節選自作者編寫的教材及配套實驗指導書。
《C++程式設計基礎及應用》(高等教育出版社,出版過程中)
《Python程式設計基礎及應用》,高等教育出版社
《Python程式設計基礎及應用實驗教程》,高等教育出版社
高校教師同行如果期望索取樣書,教學支援資料,加群,請私信作者,聯系時請提供學校及個人姓名為盼,各高校在讀學生勿擾為謝。
青少年讀者們如果期望系統性地學習Python及C/C++程式設計語言,歡迎嘗試下述今日頭條(西瓜)免費視訊課程。
C/C++從入門到放棄(重慶大學現場版)
Python程式設計基礎及應用(重慶大學現場版)