拓冰建站拓冰建站
首页 / 资讯中心 / 正文

MSVC 警告 C4819:为什么 QStringLiteral 反而报错,而裸字符串没事

MSVC 警告 C4819:为什么 QStringLiteral 反而报错,而裸字符串没事?环境:Qt 5.15.2 + MSVC 2019 (32-bit),Windows 中文系统。关键词:C4819、QStringLiteral、u""字面量、源字符集 / 执行字符集、/utf-8一、问题表现编译时蹦出一条警告:warning: C4819: 该文件包含不能在当前代码页(0)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失出问题的那一行长这样:showLog(QStringLiteral("中文内容"));第一眼最容易踩的两个误区:以为是文件没存成 UTF-8。逐字节确认过,文件头是EF BB BF(标准 UTF-8 BOM),整文件严格按 UTF-8 解码无非法字节,里面也没有任何 GBK 装不下的字符。以为裸字符串也该报。实测:把QStringLiteral(...)去掉、退回"中文内容"就不报警了。这就诡异了——QStringLiteral明明是 Qt 官方推荐的字符串字面量写法,怎么反而触发警告?而"不标准"的裸写法反而没事?二、根因:QStringLiteral 与 MSVC 的字符集模型2.1 QStringLiteral 到底展开了什么直接翻开qstringliteral.h(Qt 5.15,MSVC2019 头文件)第 64 行:#defineQT_UNICODE_LITERAL(str)u""str#
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门