天天看點

Windows環境下Qt Creator控制台輸出中文亂碼解決方法

作者:海洋餅幹叔叔

中文讨論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;
}           

其執行結果包含亂碼:

Windows環境下Qt Creator控制台輸出中文亂碼解決方法

3. 解決方案images

選擇工具->選項菜單

Windows環境下Qt Creator控制台輸出中文亂碼解決方法

在文本編輯器-顯示中勾選 Display file encoding

Windows環境下Qt Creator控制台輸出中文亂碼解決方法

右上角點UTF-8,彈出的對話框中選擇System,選“按編碼儲存”。

Windows環境下Qt Creator控制台輸出中文亂碼解決方法

儲存之後,右上角顯示的目前編碼變為System.

Windows環境下Qt Creator控制台輸出中文亂碼解決方法

再次編譯執行,問題解決。

Windows環境下Qt Creator控制台輸出中文亂碼解決方法

4. 後記

問題事實上沒有完全解決,下次再打開項目時,Qt Creator會以UTF-8讀入事實上由System編碼的檔案,連源代碼都會出現亂碼。此時,可以通過按System編碼讀入來解決。

請讀者不必糾正,大多數的應用開發,都是圖形界面,控制台應用極少,控制台裡還要使用中文的應用就更少了。

通過将整體開發環境的檔案編碼設定為System,或可解決問題。但作者不推薦這麼做, 因為事實上,UTF-8是更通用的編碼,它允許在同一個應用程式裡同時顯示多國文字。

Windows環境下Qt Creator控制台輸出中文亂碼解決方法

本案例節選自作者編寫的教材及配套實驗指導書。

《C++程式設計基礎及應用》(高等教育出版社,出版過程中)

《Python程式設計基礎及應用》,高等教育出版社

《Python程式設計基礎及應用實驗教程》,高等教育出版社

Windows環境下Qt Creator控制台輸出中文亂碼解決方法

高校教師同行如果期望索取樣書,教學支援資料,加群,請私信作者,聯系時請提供學校及個人姓名為盼,各高校在讀學生勿擾為謝。

青少年讀者們如果期望系統性地學習Python及C/C++程式設計語言,歡迎嘗試下述今日頭條(西瓜)免費視訊課程。

C/C++從入門到放棄(重慶大學現場版)

Python程式設計基礎及應用(重慶大學現場版)

Windows環境下Qt Creator控制台輸出中文亂碼解決方法

繼續閱讀