1.为什么建议把代码文件改为UTF-8?
Windows 中文环境默认是 GBK/GB2312,而 Linux、macOS 默认是 UTF-8。如果代码文件是 GBK 编码,拿到 Linux 上编译或查看,中文注释、字符串会变成乱码;反之亦然。UTF-8 是唯一在三大主流操作系统上都原生支持且默认的编码,统一用它就能消除平台差异。
2.UTF-8 "带 BOM"和"不带 BOM"两种的区别?
UTF-8 有"带 BOM"和"不带 BOM"两种。带 BOM(Byte Order Mark) 的 UTF-8文件开头有EF BB BF 三个字节,而不带 BOM的文件直接是内容,无额外字节。
3.UTF-8 "带 BOM"的作用?
旧版 MSVC 没有 /utf-8 选项时,只能靠 BOM 判断源码是 UTF-8。新版 MSVC 已支持 /utf-8 编译选项,加上后就不再依赖 BOM,可以放心使用无 BOM 的 UTF-8。
Linux 兼容性:GCC/Clang 默认按 UTF-8 解析源码,通常能正确忽略 BOM 头,因此带 BOM 的源码在 Linux 上一般也能正常构建。
4.最终实践
为保证在Windows、Linux上能构建成功并且正常显示中文,应确保所有".h"文件、".cpp"文件使用带BOM的UTF-8格式保存。如果使用 MSVC,建议同时在 .pro 中加上QMAKE_CXXFLAGS += /utf-8 作为双保险,这样即使未来有文件漏了 BOM 也能正确编译。Qt自身的文件(如".pro"".pri"".qrc"等)应使用普通的UTF-8格式(不带BOM)保存,否则会导致编译错误。
QtCreator设置如下:
【工具】->【选项】

查看或修改文件是否是UTF-8或者UTF-8(BOM),用记事本打开文件,选择另存为即可
图1:

图2:

5.注意
创建完源代码文件后,在文件中输入源代码后保存即可。请务必输入一些代码,否则直接保存空文件可能会导致文件变为GB 2312编码。