错误描述:
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)