无 BOM 的 UTF-8
Posted
技术标签:
【中文标题】无 BOM 的 UTF-8【英文标题】:UTF-8 without BOM 【发布时间】:2011-07-21 08:11:25 【问题描述】:我有需要以 UTF-8(无 BOM)保存的 javascript 文件,每次我在 Notepad++ 中将它们转换为正确的格式时,它们都会恢复为 UTF-8当我在 Visual Studio 中打开它们时使用 BOM。我怎样才能阻止 VS2010 这样做?
另一个问题,在 Visual Studio 中没有签名的 UTF-8 和没有 BOM 的 UTF-8 一样吗?
【问题讨论】:
使用 (utf-8 without BOM) 保存的文件恢复为 (utf-8 with BOM) .. 这就是问题 Force Visual Studio (2010) to save all files in UTF-8的可能重复 kabaros 问题的解决方案很简单 - 只需使用没有 BOM 的 uft-8 使用 Visual Studio 保存文件。是的,这是可能的——正如 Keavon 注意到的“没有签名的 UTF-8 接近列表的最底部”。很奇怪,带签名的 utf-8 在开头,不带签名的 utf-8 几乎在结尾,但至少它解决了这个令人沮丧的问题。 【参考方案1】:BOM 或字节顺序标记有时很烦人。 Visual Studio 不会更改文件,除非您保存它(如 Hans 所说)。
以下是您问题的解决方案: 如果要使用其他编码保存文件,请选择另存为并扩展文件对话框中的保存按钮,然后选择“使用编码保存”。或者,如果您想永久摆脱此设置,只需打开文件菜单并选择“高级保存选项”,然后您应该选择“不带签名的 UTF-8”(这也回答了您的最后一个问题 :)。是的“无签名的UTF-8”与无BOM相同。
【讨论】:
我想知道是否有一个选项可以默认为所有文件启用此功能。 当我选择“使用编码保存”时,它正确保存了文件,但无论我打开哪种文件,我都没有在“文件”菜单中看到“高级保存选项”编辑。嗯…… @ChrisJaynes 右键单击菜单栏,在一个打开的位置,然后单击自定义...命令...(*)菜单栏:文件...[添加命令]...添加“高级保存选项”我把它放在“保存选择”上方 好吧,我没有“UTF-8 without signature”这个条目……那有什么问题呢? 注意:不带签名的 UTF-8 位于列表的最底部。【参考方案2】:现在有图片了。
转到File
-> Save As
。
然后在保存按钮上单击三角形并单击Save with Encoding...
。
点击确定覆盖文件,然后从编码列表中找到UTF-8 Without signature
-> 点击OK
。
希望这可以为您节省一些时间。
【讨论】:
在 GNU/Linux 版本的 Visual Studio Code 中,此部分没有编码选项。【参考方案3】:我创建了Fix File Encoding 扩展,阻止 Visual Studio 2010+ 将 BOM 添加到 UTF-8 文件。
【讨论】:
感谢插件!除了在匹配文件后缀的设置中使用正则表达式之外,应该有其他方式来指定文件类型。此外,该插件仅在我保存文件时才对文件起作用,当我创建 javascript 时,它最初有一个 BOM(添加了 3 个字节)。【参考方案4】:很遗憾,这不适用于 csproj 文件。没有“高级保存选项”,即使您为 cs 文件将其设置为“不带签名的 UTF-8”,csproj 文件仍会与 BOM 一起保存。如果您使用 VSS,它仍然会抱怨项目文件。
【讨论】:
也许您应该从 VSS 迁移到 SVN。我记得看到一个可以为您进行转换的工具。 SVN 是免费的,您可以以低廉的价格将视觉 SVN 插件添加到您的 Visual Studio 中,并直接从 UI 使用 SVN。 “也许您应该从 VSS 迁移到 SVN。”。这是什么建议?我们大多数从事企业软件工作的人都不会挑选我们的源代码控制系统。 SVN 有它自己的问题,这就是促使创建 git 的原因,因为他们厌倦了 SVN。【参考方案5】:UTF-8 - "Save As" (Without Signature) Default - Request to include Default for UTF Without Signature
VS 2017 原生支持 EditorConfig 所以推荐的解决方案 是将
.editorconfig
文件添加到您的代码库并设置charset => utf-8
。 然后,一旦您保存文件,它将被保存为 UTF-8 而没有 BOM。
【讨论】:
恐怕VS 2017还不支持charset
in .editorconfig github.com/editorconfig/editorconfig-visualstudio/issues/…【参考方案6】:
最近我发现了这个微型命令行工具,它可以在任意 UTF-8 编码文件上添加或删除 BOM:UTF BOM Utils(new link 在 github)
小缺点,您只能下载纯 C++ 源代码。您必须创建makefile(例如CMake)并自行编译,此页面不提供二进制文件。但是,对于软件开发人员来说,这应该不是问题。
【讨论】:
【参考方案7】:对于 Visual Studio Code,请执行以下操作:
-
从右下角选择当前编码
从选项中,选择 Save with enconding
从选项中选择 UTF-8
【讨论】:
VS 和 VS 代码有很大不同。这个问题是关于VS的 虽然问题是针对 VS 的,但您回答了 VScode,这解决了我的问题,因此支持它【参考方案8】:对于vs2010 c++,当源文件包含多字节字符(如中文)时,UTF8无BOM会出现问题。
如果没有BOM,这些字符将无法正确识别,并导致编译失败。
【讨论】:
因为在没有 BOM 的 Windows 上,文件将被假定为 ANSI 编码,所以它会被破坏【参考方案9】:即使使用 Dave81 的解决方案,每次我保存该 html 文件时,Visual Studio 2015 社区仍将我的文件恢复为 UTF8-BOM。
当我创建该 html 文件时,我右键单击该项目并选择“添加”,然后添加一个 HTML 文件。
默认情况下,Visual Studio 将在您的 HTML 文件中包含 <meta charset="utf-8" />
标记。
只需删除标签,然后应用 Dave81 的解决方案,这次问题就真正消失了。
Visual Studio 似乎解析了您的 html 文件,当它看到该标记时,它会将文件转换为 UTF8-BOM,而不考虑原始文件格式(UTF-8 没有 BOM)。
我会直接在 Dave81 的解决方案下发表评论,但我没有足够的积分这样做......
【讨论】:
【参考方案10】:建议没有BOM作为标准, 但是,当使用[韩语或中文]等多个字节时,Visual Studio中没有BOM时会显示警告消息。
其实我创建了一个韩文String数组,对应的String数组在运行时坏掉了。
在使用 Visual Studio 时,根据 MS 警告信息,建议使用 UTF -8 包括 BOM。 (使用多字节字符时)
【讨论】:
【参考方案11】:要对 .csproj 文件执行高级保存,您必须首先通过右键单击项目并选择卸载项目来卸载项目。这将允许您使用不同的编码保存 .csproj 文件。
【讨论】:
【参考方案12】:UTF8Encoding utf8EmitBOM = new UTF8Encoding(false);
StreamWriter sw = new StreamWriter(Path.Combine(sourcefilePath, fileName), false, utf8EmitBOM);
此代码将在没有 BOM 的情况下以 UTF-8 创建文件
【讨论】:
问题是关于在 IDE 中保存源代码文件时的编码,而不是在用 C# 代码编写某些文件时设置编码以上是关于无 BOM 的 UTF-8的主要内容,如果未能解决你的问题,请参考以下文章