【发布时间】:2015-02-17 03:28:14
【问题描述】:
在 Visual Studio C++ 2013 Express 中,似乎除非 utf8 编码的文件有 BOM 标记,否则编译器无法理解正在编译的文件是 UTF8 编码,并将其视为本机编码。而代码编辑器则没有这个问题。
warning C4819: The file contains a character that cannot be represented in the current code page (932). Save the file in Unicode format to prevent data loss
是否有解决此问题的方法?我记得这是所有 Visual Studio 版本中的常见问题,但我不记得曾经看到过修复。我不能一直为每个不是我的文件添加 bom 标记,尤其是如果源代码保存在代码存储库中。
【问题讨论】:
-
@sjdowling 这不是很有帮助。另外,欢迎您来晚了好几年。
-
@HansPassant:我不是日本人(虽然会说和读一点),但我在我的机器上使用该语言环境。
-
@HansPassant:我的机器设置了日语语言环境。英文文本,shift-jis 作为默认代码页。文本编辑器 - 在 Visual Studio 中 - 正确打开每个文件并将编码标识为 utf8。但是,在我开始编译文件的那一刻,我会收到很多这样的警告,因为编译器与文本编辑器不同,无法识别没有 bom 的 utf8。文件的来源无关紧要,因为任何带有非 ascii 符号的文件都会触发该警告。如果我不走运,我会得到编译错误(utf8 被误认为 shift-jis can eat " 符号,意思是“不断换行”和许多其他有趣的东西)。
-
现在我已经成功地把自己弄糊涂了。该消息表明编译器正在尝试将字符串填充到 shift-jis 中。但是,根据我的经验,它实际上所做的是试图解释文件在 shift-jis 中,尽管它在 utf8 中,因为即使有问题的 char 在注释块内,您也会收到此警告。 :-\需要考虑一下。
-
@HansPassant:这是编译器级别 1 警告 c4819,如 msdn 中所述。不是文本编辑器警告。
标签: c++ visual-studio utf-8 visual-studio-2013