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,然后将另存后的文件覆盖原始文件即可。

327

被折叠的 条评论
为什么被折叠?



