如何在Visual Studio中设置标准编码

130

我正在寻找一种方法来设置Visual Studio,使其始终将我的文件保存为UTF-8编码。

我只发现了可以在整个项目中进行设置的选项。是否有一种可以在整个Visual Studio中设置的方式呢?


46
你在哪里找到设置整个项目的选项? - Marc
7个回答

77

你是否需要将文件保存为UTF-8编码,因为你使用了ASCII编码无法表示的特殊字符?如果是这种情况,那么在VS2008的全局设置中有一个选项,可以在工具 > 选项 > 环境 > 文档里找到,名为当数据不能保存在代码页中时使用Unicode保存文档。启用此选项后,如果某些字符不能在默认的代码页中表示,VS2008会将其保存为Unicode格式。

此外,哪些文件没有以UTF-8编码保存呢?默认情况下,我的所有.cs、.csproj、.sln、.config、.as*x等文件都已经以UTF-8(带签名,也就是字节顺序标记)格式保存。


2
谢谢您提供设置提示。我遇到了XAML文件的问题,在编译期间导致错误。 - surfen
2
还没有更好的解决方案吗?我的VS2015在每次崩溃后都会重置代码页,而且由于我家的电力问题,这种情况经常发生,真是太遗憾了。微软怎么会犯这样的错误呢?他们如何能制作出最好的IDE却忘记了默认的代码页设置,真是太可惜了(( - Movsar Bekaev
4
当您设置Unicode时,它实际上使用的是UTF-8还是UTF-16? - binki
@binki 要知道编码,您可以在Notepad++中打开相同的文件,并查看在“编码”菜单中检测到的值。在我的环境中,文件保存为带BOM的UTF-8。 - jakubiszon
17
问题在于数据可能会以系统默认代码页保存。但其他软件不能总是读取我的系统代码页的源代码。因此,我正在寻找一种方法来强制VS默认将所有文本文件保存为UTF-8。我不知道为什么有人想要将文本数据保存在除UTF-8之外的代码页中。 - BlackOverlord
显示剩余3条评论

35

什么是EditorConfig

使用EditorConfig可以实现。

EditorConfig帮助开发者在不同的编辑器和IDE之间定义和维护一致的编码风格。

这也包括文件编码。

默认情况下,Visual Studio 2017内置了EditorConfig,而对于旧版本的VS2012,也有可用的插件。更多信息请查看EditorConfig Visual Studio Plugin页面

如何设置

您可以设置一个高级别的EditorConfig配置文件,在整个文件夹结构中覆盖所有您想要的repos(如果您的文件真的分散在各处,则可以覆盖到驱动器根目录),并配置setting charset

charset: 设置为latin1、utf-8、utf-8-bom、utf-16be或utf-16le以控制字符集。

如果您希望进行更精细的控制,可以在每个文件夹层次结构上添加过滤器和异常等。

配置完成后,兼容的IDE应自动实现匹配文件符合设置的规则。请注意,Visual Studio不会自动转换所有文件,但在IDE中操作文件(打开和保存)时会进行部分操作。

下一步怎么做

虽然您可以拥有一个 Visual Studio 范围的设置,但我强烈建议仍要将 EditorConfig 根目录包含在您的解决方案版本控制中,以便将显式设置自动同步到所有团队成员。如果某些项目尚未设置自己的 editorconfig 文件,则您的驱动器根目录的 editorconfig 文件可作为后备。


10

我使用的是Windows7操作系统。

控制面板 - 地区和语言 - 管理员 - 用于非Unicode程序的语言。

将“更改系统区域设置”设置为英语(美国)后,我的vs2010默认编码更改为Windows-1252。它之前是gb2312

我创建了一个新的C++项目的.cpp文件,在将新文件检入TFS后,文件属性页面显示编码为Windows-1252。


在Windows 10中有一个带有标签“Beta:使用Unicode UTF-8支持世界语言”的复选框。当我勾选它时,我可以在Visual Studio 2019中打开使用Windows-1252编码的文件。但是我只能找到这个配置,因为这个答案。谢谢! - Gean Ribeiro

8

这是一个老话题,但我会在这里分享一下帮助了我的方法: 更改Visual Studio默认编码格式

Visual Studio的默认编码格式是UTF-8,但它内置了各种语言的编码格式,可以根据您的需要进行选择。通常情况下,可以保留UTF-8,因为程序通常是用英语编写的,所以兼容性更好。它可以在大多数语言系统中运行,并且不会引起异常,因为它们可以被识别。

您可以在Visual Studio的“高级保存选项”对话框中设置默认编码格式,它可以通过“文件”菜单打开;但有时它不会在“文件”菜单中显示“高级保存选项”而被隐藏。

  1. 点击"工具",在弹出菜单中选择"自定义"以打开"自定义"对话框;选择"命令"选项卡,点击"菜单栏"右侧的下拉列表框,并从弹出选项中选择"文件";点击"添加命令",在打开的对话框中,在左侧列表框中选择"文件",在右侧列表框中选择"高级保存选项";点击"确定",它将被添加到"文件"菜单中。

  2. 点击"文件",在弹出菜单中选择"高级保存选项"。 打开"高级保存选项"对话框,当前设置的编码为"US-ASCII - Codepage 20127"。

  3. 点击"编码"下拉列表框,拖动滚动条到顶部,并选择"Unicode (UTF-8 with signature) - Codepage 65001"。

  4. 点击"确定",然后Visual Studio将默认编码格式设置为UTF-8。


这真的应该成为被接受的答案。 - Osyotr
好的文章。然而,如果链接改变或网站随时间被关闭,将文章要点包含在您的回答中会很有帮助。 - Vinz
1
需要注意的是,在大多数情况下,你应该使用没有签名的UTF-8而不是带有签名的UTF-8。虽然有一些特殊情况可能需要使用带有签名的UTF-8,但它们只是例外而不是规则。请参考http://www.unicode.org/versions/Unicode5.0.0/ch02.pdf第2.6节(或第36页,表2-4)以获取官方指南。 - Nicolas Coombs
3
对我来说,这只是更新当前显示文件的编码。如果我创建一个新文件,选择的编码不会被使用。 - agbinfo
1
我不想被误解,但我相信这只适用于当前打开的文件。 - undefined

2
问题在于Windows/Microsoft应用程序在保存非ASCII类型(UTF-8等)时,在所有文件开头添加字节顺序标记。其他应用程序通常会因为读取这些奇怪的Microsoft UTF-8字节顺序编码标记而出现问题。例如,在旧版IE Web浏览器中以UTF-8进行编码就会触发quirsksmode,因为浏览器通常根据页面开头的编码来显示XHTML网页,这会使其他应用程序查看这些UTF-8 Visual Studio页面时出现问题。
我通常不建议使用Visual Studio扩展,但我会推荐一个解决此问题的扩展:
修复文件编码:https://vlasovstudio.com/fix-file-encoding/ 上述FixFileEncoding安装程序将删除字节顺序标记,并强制VS在所有.NET页面的开头以UTF-8格式保存所有文件。安装后,转到“工具”>“选项”,然后选择“FixFileEncoding”。它应该允许您将所有保存设置为UTF-8。 将.cshtml添加到始终在没有字节顺序标记的情况下保存为UTF-8的文件列表中:".(htm|html|cshtml)$)"。
现在在Visual Studio中打开其中一个文件。要验证其是否以UTF-8方式保存,请转到“文件”>“另存为”,然后在保存按钮下选择“使用编码保存”。默认情况下,它应该从编码列表中选择“UNICODE(不带签名保存)”。现在,当您在Visual Studio中保存该页面时,它应始终以UTF-8格式保存,而文件开头没有字节顺序标记。

1

我不知道有全局设置,但你可以尝试以下方法:

  1. 将所有Visual Studio模板保存为UTF-8格式
  2. 编写一个Visual Studio宏/插件,监听DocumentSaved事件,并将文件保存为UTF-8格式(如果尚未保存)。
  3. 在源代码控制上放置代理,以确保新文件始终为UTF-8格式。

2
  1. 这可能是个坏主意,因为一旦你检入一个文件,它就会确定你的文件与检入的文件不匹配。至少在Subversion中是这样的。如果能够对检查和检入进行编码,那么这将不是一个问题。
- TamusJRoyce
你好,你知道为什么报表设计器将编码属性更改为utf-8吗?http://stackoverflow.com/questions/30071846/editing-client-report-definition-rdlc-file-in-report-desinger-change-encoding-at - Mohammadreza

1
在Windows 10/11上:设置 -> 时间和语言 -> 语言和地区 -> 管理语言设置 -> 管理(选项卡) -> 更改系统区域设置... -> Beta: 使用Unicode UTF-8进行全球语言支持(勾选框)。视频教程 操作系统将以UTF-8保存所有文本文件。
此外,您将不再需要为C++控制台应用程序设置区域设置(std::setlocale(LC_ALL, "de_DE")std::setlocale(LC_ALL, "Russian"))。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接