最近老遇到一个奇怪的问题。在 VS 2013 编译时,爆出很多警告:
warning C4819: The file contains a character that cannot be represented in the current code page (936). Save the file in Unicode format to prevent data loss
网上能找到一些方法禁止出现C4819
的警告。但我这里还有一个事情是,随着警告还出现大量莫名其妙的错误,貌似 VS 2013 根本没有正确读取文本。
经过多次测试,我确定原因出现在我使用了utf-8 withou signature
这种编码方式,如果改成gbk
或unicode
或utf-8 with signature
都不会出问题。那为什么会出现这个问题呢? vs 2013 有一条设置auto detect encoding utf8 withou signature
是自动勾选的,按道理应该没问题。可我这里就是不行。
现在还不知道怎么解决这个问题。要想保留 utf8 格式,只能加上文件签名,但这样会引发跨系统的移植问题。
后记:
把系统程序的语言改成英语(不是指界面),可以解决这个问题。但此时,程序将是UNICODE编码,需留意一下。更关键的是,系统里有些软件会变成乱码。所以一个方法是在编译时将系统程序语言变成英语,编译后再改回来。
Q. E. D.