Visual Studio 在VisualStudio中将所有 *.cs文件转换为Unicode

xqnpmsa8  于 2023-10-23  发布在  其他
关注(0)|答案(4)|浏览(147)

我的团队不关注文件编码(这是正确的,因为人类不应该被文件编码所困扰)。然而,有些文件是以utf8格式保存的,有些则是以区域编码(cp 1250)保存的。
我需要做两件事:
1.对将来创建的所有文件强制使用utf8
1.将所有具有指定扩展名(或至少 *.cs)的现有文件转换为utf-8
如何使用Visual-Studio、Resharper插件或Powershell实现这些目标?
我试着用PowerShell做#2,但是它很混乱(有时它会删除/添加最后一行)。也许有一些免费软件,我可以用它来做,第一点对我来说更重要。

kcugc4gi

kcugc4gi1#

是的,有可能。

对所有文件强制使用UTF-8

使用.editorconfig作为@Richard之前提到的。从Visual Studio v15.3开始,.editorconfig支持得到了修复和改进。这个简单的.editorconfig在解决方案级别足以确保每个*.csUTF-8格式保存,而不带BOM

  1. root = true
  2. [*.cs]
  3. charset = utf-8

此外,它可以转换任何由Visual Studio手动打开和保存的现有文件。

将所有现有代码文件转换为UTF-8

我测试了线程Save all files in Visual Studio project as UTF-8的一些答案,它们工作得很糟糕:非拉丁字符(在我的例子中是西里尔字母)被转换成了无法阅读的字形。相反,Visual Studio本身可以轻松地进行“打开-保存”转换。
要自动打开并重新保存解决方案中的所有代码文件,请使用一个简单的R#技巧:
1.将任何适用于所有文件的R#代码样式规则设置为严格拒绝公司代码约定的值。例如,大括号布局是一个显而易见的选择。
1.使用Code Cleanupfeature(默认为Ctrl+E,C)将其应用于整个解决方案。选择一个最简单的内置“重新格式化代码”模板,以尽量减少更改。
1.在格式化并保存所有文件之后,将R#规则恢复为原始规则,并再次运行Code Cleanup
在此之后,所有的*.cs文件都应该保存为UTF-8(对于R#支持的另一种文件类型也是如此)。漂亮的格式作为奖金。

展开查看全部
polhcujo

polhcujo2#

1:有选择

  1. Environment | Documents | Save documents as Unicode when data cannot be saved in codepage

但并不总是这样似乎没有办法强制这样做(也没有可能的扩展)。有没有想过写一个扩展:-)?
回复#2:PSH应该是可行的(但没有最后一行可能会搞砸最简单的方法)。参见https://stackoverflow.com/a/850751/67392

  • 编辑 *:这似乎是一个常见的请求(参见User Voice)。其中一条评论是用户之声要求在VS 2017中可以使用.editorconfig来设置文件的默认编码。
4sup72z8

4sup72z83#

目前最有效的解决方案是:
1.在.cs部分的.editorconfig文件中设置.cs文件的编码:

  1. [*.cs]
  2. charset = utf-8

1.运行dotnet format工具:dotnet format
就这样
(我最初发布这条评论,但Ilya Chumakov建议将其作为答案)

xhv8bpkk

xhv8bpkk4#

Powershell 5.1脚本,在源根目录下运行

  1. Get-ChildItem -Include *.cs -Recurse | ForEach-Object {
  2. $file = $_.FullName
  3. $mustReWrite = $false
  4. # Try to read as UTF-8 first and throw an exception if
  5. # invalid-as-UTF-8 bytes are encountered.
  6. try
  7. {
  8. [IO.File]::ReadAllText($file,[Text.Utf8Encoding]::new($false, $true))
  9. }
  10. catch [System.Text.DecoderFallbackException]
  11. {
  12. # Fall back to Windows-1250
  13. $content = [IO.File]::ReadAllText($file,[Text.Encoding]::GetEncoding(1250))
  14. $mustReWrite = $true
  15. }
  16. # Rewrite as UTF-8 without BOM (the .NET frameworks' default)
  17. if ($mustReWrite)
  18. {
  19. Write "Converting from 1250 to UTF-8"
  20. [IO.File]::WriteAllText($file, $content)
  21. }
  22. else
  23. {
  24. Write "Already UTF-8-encoded"
  25. }
  26. }
展开查看全部

相关问题