在vs2017中,因为编码所带来的 C1071 、C4819问题。

本文讲述了在VisualStudio2017中遇到的C1071和C4819错误,源于从Linux移植到Windows时,UTF-8withBOM编码的注释导致的问题。解决办法是统一使用UTF-8编码,尤其是避免使用/*中文*/这样的注释,因为BOM的存在是微软的习惯,而非标准。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

错误描述:

C1071 在注释中遇到意外的文件结束 的解决办法

C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失。

或者是本来好好的代码,从linux移动到win,就出现这个问题。

首先vs2017中,我很清楚的记得无论是UTF8还是UTF8with'BOOM都是可以通过编译的,但是今天我从linux拉下一个代码后,却出现不能编译的问题。

解决办法:

回来查阅一些资料之后,最终的结论是——在vs的环境中,还是要统一使用UTF-8withBOM编码。

那为什么之前没有出问题呢?这个很有意思!

首先,在UTF-8中,没有出问题,那是因为我没有用这样的的注释/*中文*/。或者是用了前后加空格的注释/* 中文 */都不会在该编码下出问题。

当用了/*中文*/这样的注释时候,就会出问题。

这个时候*和中文就被识别成一个字符,那么注释就会失效,接着奇怪的语法问题就会出现,甚至会提示你int类型无效等等。

即使你不用/*中文*/,编译器也会警告,这就是C4819错误的由来。相比到这你就能明白这些错误的由来了。

那么为什么一定要用UTF-8withBOM呢?Linux为什么都行?

不含 BOM 的 UTF-8 才是标准形式,在 UTF-8 文件中放置 BOM 主要是微软的习惯(顺便提一下:把带有 BOM 的小端序 UTF-16 称作「Unicode」而又不详细说明,这也是微软的习惯)。

参考资料:

visual studio2017----编码和行尾 - 陶大先生 - 博客园 (cnblogs.com)

带 BOM 的 UTF-8」和「无 BOM 的 UTF-8」有什么区别?网页代码一般使用哪个? - 知乎 (zhihu.com)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值