ChatGPT解决这个技术问题 Extra ChatGPT

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

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

使用 (utf-8 without BOM) 保存的文件恢复为 (utf-8 with BOM) .. 这就是问题
kabaros 问题的解决方案很简单 - 只需使用没有 BOM 的 uft-8 使用 Visual Studio 保存文件。是的,这是有可能的——正如 Keavon 注意到的“没有签名的 UTF-8 接近列表的最底部”。很奇怪,带签名的 utf-8 在开头,而没有签名的 utf-8 几乎在结尾,但至少它解决了这个令人沮丧的问题。

P
Pang

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

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


我想知道是否有一个选项可以默认为所有文件启用此功能。
当我选择“使用编码保存”时,它正确保存了文件,但是无论我在编辑器中打开哪种文件,我都没有在“文件”菜单中看到“高级保存选项”。嗯……
@ChrisJaynes 右键单击菜单栏,在一个打开的位置,然后单击自定义...命令...(*)菜单栏:文件...[添加命令]...添加我放置的“高级保存选项”它就在“保存选择”的正上方
好吧,我没有“没有签名的UTF-8”条目……那有什么问题呢?
注意:不带签名的 UTF-8 位于列表的最底部附近。
p
phuclv

现在有图片。

转到文件-> 另存为。然后在 Save 按钮上单击三角形并单击 Save with Encoding...。单击 ok 以覆盖文件,然后从编码列表中找到 UTF-8 without signature -> 单击 OK。

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


在 GNU/Linux 版本的 Visual Studio Code 中,此部分没有编码选项。
S
Sergey Vlasov

我创建了阻止 Visual Studio 2010+ 将 BOM 添加到 UTF-8 文件的 Fix File Encoding 扩展。


感谢那个插件!除了在匹配文件后缀的设置中使用正则表达式之外,应该有其他方式来指定文件类型。此外,该插件仅在我保存文件时才对文件起作用,当我创建 javascript 时,它最初有一个 BOM(添加了 3 个字节)。
W
Wray

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


也许你应该从 VSS 转移到 SVN。我记得看到一个可以为您进行转换的工具。 SVN 是免费的,您可以以低廉的价格将视觉 SVN 插件安装到您的 Visual Studio 中,并直接从 UI 使用 SVN。
“也许你应该从 VSS 转移到 SVN。”。这是什么建议?我们大多数从事企业软件工作的人都不会挑选我们的源代码控制系统。 SVN 有它自己的问题,这是促使创建 git 的原因,因为他们厌倦了 SVN。
D
Dave Anderson

UTF-8 - "Save As" (Without Signature) Default - Request to include Default for UTF Without Signature

VS 2017 原生支持 EditorConfig,因此推荐的解决方案是将 .editorconfig 文件添加到您的代码库并设置 charset => utf-8。然后,一旦您保存文件,它将被保存为没有 BOM 的 UTF-8。


恐怕 VS 2017 仍然不支持 .editorconfig github.com/editorconfig/editorconfig-visualstudio/issues/… 中的 charset
W
Wernfried Domscheit

最近我发现了这个小型命令行工具,它可以在任意 UTF-8 编码文件上添加或删除 BOM:UTF BOM Utils(github 上的 new link

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


M
Mahesh

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

从右下角,选择当前编码 From options,选择 Save with enconding From options,选择 UTF-8


VS 和 VS 代码非常不同。这个问题是关于 VS
虽然问题是针对 VS 的,而您回答了 VScode,这解决了我的问题,因此支持它
M
Martin Wang

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

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


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

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

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

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

只需删除标签然后应用 Dave81 的解决方案,这一次问题就真正消失了。

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

我会直接在 Dave81 的解决方案下发表评论,但我没有足够的积分这样做......


C
C yp

建议没有 BOM 作为标准,但是,当使用多个字节,例如 [韩语或中文] 时,在 Visual Studio 中没有 BOM 时会显示警告消息。

实际上,我创建了一个韩文字符串数组,而对应的字符串数组在运行时被破坏了。

使用 Visual Studio 时,根据 MS 警告信息,建议使用 UTF -8 包括 BOM。 (使用多字节字符时)


W
Winston Waligora

要对 .csproj 文件执行高级保存,您必须首先通过右键单击项目并选择卸载项目来卸载项目。这将允许您使用不同的编码保存 .csproj 文件。


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

此代码将在没有 BOM 的情况下以 UTF-8 创建文件


问题是关于在 IDE 中保存源代码文件时的编码,而不是在用 C# 代码编写某些文件时设置编码