我有 javascript 文件,我需要将它们保存为 UTF-8(没有 BOM),每次我在Notepad++中将它们转换为正确的格式时,当我在 Visual Studio 中打开它们时,它们就会恢复为带有 BOM 的 UTF-8。我怎样才能阻止 VS2010 这样做?
另一个问题,Visual Studio 中没有签名的 UTF-8 是否与没有 BOM 的 UTF-8 相同?
我有 javascript 文件,我需要将它们保存为 UTF-8(没有 BOM),每次我在Notepad++中将它们转换为正确的格式时,当我在 Visual Studio 中打开它们时,它们就会恢复为带有 BOM 的 UTF-8。我怎样才能阻止 VS2010 这样做?
另一个问题,Visual Studio 中没有签名的 UTF-8 是否与没有 BOM 的 UTF-8 相同?
BOM 或字节顺序标记有时很烦人。除非您保存文件(如 Hans 所说),否则 Visual Studio 不会更改文件。
这是您问题的解决方案: 如果您想使用其他编码保存文件,请选择另存为并扩展文件对话框中的保存按钮,然后选择“使用编码保存”。或者,如果您想永久摆脱此设置,只需打开文件菜单并选择“高级保存选项”,然后您应该选择“不带签名的 UTF-8”(这也回答了您的最后一个问题 :)。是的“没有签名的 UTF-8”与没有 BOM 的相同。
我创建了Fix File Encoding扩展,可防止 Visual Studio 2010+ 将 BOM 添加到 UTF-8 文件。
不幸的是,这不适用于 csproj 文件。没有“高级保存选项”,即使您为 cs 文件将其设置为“不带签名的 UTF-8”,csproj 文件仍会与 BOM 一起保存。如果您使用 VSS,它仍然会抱怨项目文件。
UTF-8 - “另存为”(无签名)默认值 - 请求为无签名的 UTF 包含默认值
VS 2017 原生支持EditorConfig,因此推荐的解决方案是将
.editorconfig
文件添加到您的代码库并设置charset => utf-8
. 然后,一旦您保存文件,它将被保存为没有 BOM 的 UTF-8。
最近我发现了这个小型命令行工具,它可以在任意 UTF-8 编码文件上添加或删除 BOM:UTF BOM Utils(github 上的新链接)
小缺点,您只能下载纯 C++ 源代码。您必须创建 makefile(例如使用CMake)并自行编译,此页面上不提供二进制文件。但是,对于软件开发人员来说,这不应该是任何问题。
对于vs2010 c++,当源文件包含多字节字符(例如中文)时,没有BOM的UTF8会出现问题。
如果没有 BOM,这些字符将无法正确识别,并导致编译失败。
要对 .csproj 文件执行高级保存,您必须首先通过右键单击项目并选择卸载项目来卸载项目。这将允许您使用不同的编码保存 .csproj 文件。
即使使用 Dave81 的解决方案,每次我保存该 html 文件时,Visual Studio 2015 社区仍然将我的文件恢复为 UTF8-BOM。
当我创建该 html 文件时,我右键单击该项目并选择“添加”,然后添加一个 HTML 文件。
默认情况下,Visual Studio 将<meta charset="utf-8" />
在您的 HTML 文件中包含一个标记。
只需删除标签然后应用 Dave81 的解决方案,这一次问题就真正消失了。
似乎 Visual Studio 解析了您的 html 文件,当它看到该标记时,它会将文件转换为 UTF8-BOM,而不考虑原始文件格式(没有 BOM 的 UTF-8)。
我会直接在 Dave81 的解决方案下发表评论,但我没有足够的积分这样做......
建议没有 BOM 作为标准,但是,当使用多个字节,例如 [韩语或中文] 时,在 Visual Studio 中没有 BOM 时会显示警告消息。
实际上,我创建了一个韩文字符串数组,而对应的字符串数组在运行时被破坏了。
使用 Visual Studio 时,根据 MS 警告信息,建议使用 UTF -8 包括 BOM。(使用多字节字符时)
UTF8Encoding utf8EmitBOM = new UTF8Encoding(false);
StreamWriter sw = new StreamWriter(Path.Combine(sourcefilePath, fileName), false, utf8EmitBOM);
此代码将在没有 BOM 的情况下以 UTF-8 创建文件