中文讨论Windows环境下Qt Creator控制台输出中文乱码的解决办法。

1. 开发环境

中文Windows 10 64bit, Qt Creator 4.11.0, mingw 7.3.0 64 bit

版权声明

本文可以在互联网上自由转载,但必须:注明出处(作者:海洋饼干叔叔)并包含指向本页面的链接。

本文不可以以纸质出版为目的进行改编、摘抄。

2. 故障现象

​ Plain C/C++ Application在控制台输出中文时出现乱码。

程序如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
//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;
}

其执行结果包含乱码:

image-20200216161744112

3. 解决方案images

选择工具->选项菜单

image-20200216161839040

在文本编辑器-显示中勾选 Display file encoding

image-20200216161856648

右上角填UTF-8,弹出的对话框中选择System,选“按编码保存”。

image-20200216162022426

保存之后,右上角显示的当前编码变为System.

image-20200216162052975

再次编译执行,问题解决。

image-20200216162110468

4. 后记

问题事实上没有完全解决,下次再打开项目时,Qt Creator会以UTF-8读入事实上由System编码的文件,连源代码都会出现乱码。此时,可以通过按System编码读入来解决。

请读者不必纠正,大多数的应用开发,都是图形界面,控制台应用极少,控制台里还要使用中文的应用就更少了。

通过当整体开发环境的文件编码设置为System,或可解决问题。但作者不推荐这么做, 因为事实上,UTF-8是更通用的编码,它允许在同一个应用程序里同时显示多国文字。

image-20200216163001406