Visual studio 打开包含中文的文件出现乱码、警告或者编译错误的解决办法

Visual studio 打开包含中文的文件,比如QStringLiteral中有中文,提示类似如下的警告并在编译时提示错误的解决办法:

warning C4828: 文件包含在偏移 0x42af 处开始的字符,该字符在当前源字符集中无效(代码页 65001)。

一、警告的含义

warning C4828: 文件包含在偏移 0x42af 处开始的字符,该字符在当前源字符集中无效(代码页 65001)。
  • 代码页 65001:即 UTF-8。

  • 编译器认为你的源文件是 UTF-8 编码,但在文件的某个位置(偏移 0x42af)遇到了一个不符合 UTF-8 规则的字节序列,因此发出警告。

  • 虽然通常不会导致编译失败,但可能造成中文注释或字符串常量被错误解释,运行时显示乱码或意外行为。


二、产生原因的核心矛盾

你的源文件很可能实际上是 GBK / GB2312 编码,但被编译器当作了 UTF-8。

  • 常见场景

    • 你在 Visual Studio 中直接编辑保存,VS 默认使用系统区域编码(中文 Windows 为 GBK,代码页 936)。

    • 或者你从别处复制了一段 GBK 编码的代码,粘贴到了 UTF-8 工程中。

    • 编译器选项 /source-charset 未设置,默认跟随系统区域(中文系统默认为 GBK),但你的项目属性或文件签名又声明为 UTF-8,造成混乱。

  • QStringLiteral 为什么会触发?

    • QStringLiteral(str) 会在编译时将字符串转换为宽字符数组,编译器需要正确解释源文件中的字符串字面量。如果源文件是 GBK 编码,而编译器按 UTF-8 去解读,就会在遇到中文时报 C4828。

    • 即使不报错,运行时也可能出现 QString 显示乱码。

  • 三、解决办法

将文件使用记事本打开,选择另存为,编码选择:UTF-8 BOM,然后将另存后的文件覆盖原始文件即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值