QT5 输出中文乱码+常量中有换行符(经验篇)

博客主要讲述了两个问题的解决办法。一是输出中文乱码,可在文件前加入特定语句;二是常量中有换行符,这是编码格式问题,修改后需依次进行构建、清理项目、执行qmake、运行操作,否则可能无效。

QT5 输出中文乱码+常量中有换行符

输出中文乱码

在文件前加入下面这条语句:

#pragma execution_character_set("utf-8")

如图:
在这里插入图片描述

常量中有换行符

主要是由于万恶的编码格式导致的,记得在修改完之后,构建->清理项目->执行qmake->运行,否则很可能不起作用!!!
在这里插入图片描述

Qt5 开发环境中使用中文字符串时,可能会遇到编译错误 `error C2001: 常量中有换行符`。这种问题通常与源文件的编码格式有关,特别是在使用 MSVC 编译器(如 MSVC 2017)时更为常见。以下是几种有效的解决方法: ### 1. 设置文件保存为 UTF-8 with BOM 编码 Qt 默认使用 UTF-8 编码处理字符串,而 Windows 系统下的 MSVC 编译器默认使用本地编码(如 GBK 或 GB2312)。如果源文件保存为无 BOM 的 UTF-8 编码,MSVC 可能无法正确识别中文字符,从而导致 `error C2001`。 解决方法是: - 在 Qt Creator 中,点击 **工具(Tools)** -> **选项(Options)** -> **文本编辑器(Text Editor)** -> **行为(Behavior)**; - 在“文件编码(File Encoding)”一栏中将默认编码设置为 **UTF-8 with BOM(If encoding is UTF-8, add BOM)**; - 保存文件并重新编译,可有效解决该问题[^1]。 ### 2. 使用 `QStringLiteral` 包裹中文字符串 Qt 提供了宏 `QStringLiteral`,用于在编译时将字符串字面量直接转换为 `QString`,并避免运行时转换带来的性能损耗。同时,该宏也能有效处理 UTF-8 编码的中文字符串,避免编译器误判换行符。 例如: ```cpp QString Qstr_ExtentedPrintValue = QStringLiteral("黄"); ``` 使用 `QStringLiteral` 可确保字符串在编译阶段被正确解析,避免因编码问题导致的 `error C2001`[^1]。 ### 3. 使用记事本重新保存文件并调整编码 如果文件中仅有个别中文字符报错,可以尝试以下步骤: - 用记事本打开源文件; - 选择 **另存为**,在保存对话框中选择编码为 **UTF-8**; - 保存后重新在 Qt Creator 中打开并编译; - 若中文仍显示乱码,再将中文字符串用 `QStringLiteral` 包裹即可[^2]。 ### 4. 使用 `#pragma execution_character_set("utf-8")` 指令 在源文件顶部添加以下预处理指令,可以强制 MSVC 使用 UTF-8 编码处理字符串常量: ```cpp #pragma execution_character_set("utf-8") ``` 该指令会告诉编译器将源文件中的字符常量视为 UTF-8 编码,从而避免因编码识别错误导致的 `error C2001`[^3]。 ### 5. 配置 Visual Studio 的默认编码为 UTF-8(如使用 VS 作为开发环境) 如果使用的是 Visual Studio 作为开发环境,可以通过以下方式设置默认编码为 UTF-8: - 安装插件 **Force UTF-8 (No BOM)**; - 或者通过“高级保存选项”将文件保存为 **Unicode (UTF-8 with signature) - 代码页 65001** 编码格式[^5]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值