没有BOM的UTF-8


180

我有一些需要将它们保存为UTF-8(不包含BOM)的javascript文件,每次我在Notepad ++中将它们转换为正确的格式时,当我在Visual Studio中打开它们时,它们都将恢复为带有BOM的UTF-8。如何阻止VS2010这样做?

另一个问题,在Visual Studio中没有签名的UTF-8是否与没有BOM的UTF-8相同?


13
使用(不带BOM的utf-8)保存的文件将还原为(不带BOM的utf-8)..这就是问题所在
kabaros 2011年


解决kabaros问题的方法很简单-只需使用uft-8在无BOM的情况下使用Visual Studio保存文件即可。是的,这是有可能的-正如Keavon注意到的那样,“无签名的UTF-8不在列表的最底部。” 奇怪的是,带有签名的utf-8在开头,而没有签名的utf-8在结尾处,但是至少它解决了这个令人沮丧的问题。
cyriel 2015年

Answers:


227

BOM或字节顺序标记有时很烦人。除非您保存文件,否则Visual Studio不会更改文件(如汉斯所说)。

这是您问题的解决方案: 如果要使用其他编码保存文件,请选择另存为,然后在文件对话框中扩展保存按钮,然后选择“使用编码保存”。或者,如果您想永久摆脱此设置,只需打开“文件”菜单,然后选择“高级保存选项”,然后在此处选择“不带签名的UTF-8”(这也回答了您的最后一个问题:)。是的“没有签名的UTF-8”与没有BOM的相同。


11
我想知道是否有一个选项默认为所有文件启用此功能。
mihai 2012年

3
当我选择“使用编码保存”时,它可以正确保存文件,但是无论我在编辑器中打开了哪种文件,我都没有在“文件”菜单中看到“高级保存选项”。嗯...-
克里斯·杰恩斯

20
@ChrisJaynes右键单击菜单栏,在一个空白处,然后单击定制...命令...(*)菜单栏:文件... [添加命令] ...添加到我放入的“高级保存选项”中它位于“保存选择”的上方
Tracker1,2012年

4
好吧,我没有条目“没有签名的UTF-8”……那是什么问题?
Marco Klein

14
注意:“无签名的UTF-8”位于列表的最底部。
Keavon 2014年

29

现在带有图片。

  1. 转到File-> Save As

    文件/另存为

  2. 然后在保存按钮上单击三角形,然后单击确定Save with Encoding...

    编码保存

  3. 单击确定以覆盖文件,然后从编码列表中查找UTF-8 Without signature->单击OK

    UTF-8无签名

希望这可以节省您一些时间。


26

我创建了修复文件编码扩展名,该扩展名可防止Visual Studio 2010+将BOM添加到UTF-8文件。


1
谢谢你的插件!除了在与文件后缀匹配的设置中使用正则表达式外,还应该有其他指定文件类型的方法。此外,该插件仅在保存文件时起作用,在创建javascript时,它最初具有BOM(添加3个字节)。
2014年

6

不幸的是,这不适用于csproj文件。没有css文件的“高级保存选项”,即使您将其设置为“不带签名的UTF-8”,csproj文件仍然与BOM保存在一起。如果使用VSS,它仍然会抱怨项目文件。


也许您应该从VSS迁移到SVN。我记得曾经看到一个可以为您进行转换的工具。SVN是免费的,而且价格低廉,您可以将Visual SVN插件插入Visual Studio中,并直接从UI使用SVN。
Dave81

7
“也许您应该从VSS转移到SVN。”。那是什么建议?我们大多数从事企业软件工作的人都不会选择我们的源代码控制系统。SVN有它自己的问题,正是这些问题促使了git的创建,因为它们已经厌倦了SVN。
湿婆


2

对于vs2010 c ++,当源文件包含多字节字符(例如中文)时,不带BOM的UTF8会出现问题。

没有BOM,将无法正确识别这些字符,并导致编译失败。


因为在没有BOM的Windows上,该文件将被假定为具有ANSI编码,所以它将被破坏
phuclv

2

最近,我发现了这个小巧的命令行工具,该工具可在任意UTF-8编码文件上添加或删除BOM:UTF BOM Utils(github上的新链接

几乎没有什么缺点,您只能下载纯C ++源代码。您必须创建makefile(例如,使用CMake)并自己进行编译,此页面上未提供二进制文件。但是,对于软件开发人员来说,这应该不是什么问题。


1

即使有了Dave81的解决方案,Visual Studio 2015社区仍然每次保存该html文件时都将我的文件还原为UTF8-BOM。

创建该html文件时,右键单击该项目并选择“添加”,然后添加一个HTML文件。

默认情况下,Visual Studio将包含一个 <meta charset="utf-8" />在HTML文件中标记。

只需删除标签,然后应用Dave81的解决方案,这个问题就可以立即消除。

似乎Visual Studio会解析您的html文件,并且当看到该标记时,它将文件转换为UTF8-BOM,而无需考虑原始文件格式(不带BOM的UTF-8)。

我本来可以直接在Dave81的解决方案下发表评论,但我没有足够的意见来做...


0

对于Visual Studio Code,请执行以下操作:

  1. 从右下角选择当前编码 在此处输入图片说明
  2. 在选项中,选择保存时 在此处输入图片说明
  3. 从选项中选择UTF-8 在此处输入图片说明

VS和VS代码有很大的不同。这个问题是关于VS
phuclv

尽管问题是针对VS的,但您针对VScode的回答,这解决了我的问题,因此对此表示反对
Ashu

-2
UTF8Encoding utf8EmitBOM = new UTF8Encoding(false);
StreamWriter  sw = new StreamWriter(Path.Combine(sourcefilePath, fileName), false, utf8EmitBOM);

此代码将在不带BOM的UTF-8中创建文件


问题是关于在IDE中保存源代码文件时进行编码,而不是在用C#代码编写某些文件时进行编码设置
phuclv
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.