VS2013 不支持无文件头的 UTF8 编码格式

作者: , 共 614 字 , 共阅读 0

最近老遇到一个奇怪的问题。在 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这种编码方式,如果改成gbkunicodeutf-8 with signature都不会出问题。那为什么会出现这个问题呢? vs 2013 有一条设置auto detect encoding utf8 withou signature是自动勾选的,按道理应该没问题。可我这里就是不行。

现在还不知道怎么解决这个问题。要想保留 utf8 格式,只能加上文件签名,但这样会引发跨系统的移植问题。

后记:

把系统程序的语言改成英语(不是指界面),可以解决这个问题。但此时,程序将是UNICODE编码,需留意一下。更关键的是,系统里有些软件会变成乱码。所以一个方法是在编译时将系统程序语言变成英语,编译后再改回来。

Q. E. D.

类似文章:
在 Python 中操作文件或字符串时,有时候会碰到 UnicodeDecodeError 异常:
编程 » Linux, Vim, 字符编码
由于 UNICODE 的优势,目前推荐都用 UTF-8 进行编码。
编程 » C++, 编译链接
最近升级系统,出现好多莫名其妙的问题。其中一个便是 G++编译后,发现其中一个动态链接库引用了绝对地址。正常情况下运行ldd bin/auto应该是下面的结果:
相似度: 0.087
编程 » C++, GCC, 编译链接
C++的链接分为两部分,一个是编译时,一个是运行时。但运行时的行为也收到编译参数的影响。
编程 » C++, GCC, 编译链接
LD 在链接生成目标文件时,会从左到有扫描输入的依赖库,当依赖库之间也有依赖关系时,必须将「依赖别人的库」放在「被别人依赖的库」的前面。否则会链接失败!失败的症状有:
编程 » Excel
Excel 中可设置每个单元格显示数字和文本的格式:
出现的一个场景是将函数指针用 void
编程 » C++, 编译错误
在 gcc 中,存在继承关系的模版类,子类无法直接访问父类的成员,即使该成员是protectedpublic
编程 » C++, GCC, 编译链接
LD 在链接生成目标文件时,会从左到有扫描输入的依赖库,当依赖库之间也有依赖关系时,必须将「依赖别人的库」放在「被别人依赖的库」的前面。否则会链接失败!失败的症状有: