在 VisualStudio 中将所有 *.cs 文件转换为 unicode

问题描述 投票:0回答:4

我的团队不关注文件编码(这是正确的,因为人类不应该被文件编码困扰)。然而,有些文件以 utf8 保存,有些以区域编码 (cp1250) 保存。

我需要做两件事:

  1. 对将来创建的所有文件强制使用 utf8
  2. 将具有给定扩展名(或至少 *.cs)的所有现有文件转换为 utf-8

如何使用 Visual-Studio、Resharper 插件或 Powershell 实现这些目标?

我尝试使用 PowerShell 执行#2,但它很混乱(有时它会删除/添加最后一行)。可能有一些免费软件可以用来做到这一点,第 1 点对我来说更重要。

visual-studio unicode utf-8 resharper visual-studio-2017
4个回答
3
投票

是的,这是可能的。

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

使用

.editorconfig
作为 @Richard 之前提到的。从 Visual Studio v15.3 开始,修复并改进了
.editorconfig
支持。这个简单的
.editorconfig
在解决方案级别足以确保每个
*.cs
都保存在 UTF-8 中,没有 BOM:

root = true

[*.cs]
charset = utf-8

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

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

我测试了线程中的一些答案将 Visual Studio 项目中的所有文件保存为 UTF-8,但它们工作得很糟糕:非拉丁字符(在我的例子中是西里尔字母)已被转换为不可读的字形。相反,Visual Studio 本身完美地完成了“打开-保存”转换。

要自动打开并重新保存解决方案中的所有代码文件,请使用简单的 R# 技巧:

  1. 将适用于所有文件的任何 R# 代码样式规则设置为严格拒绝公司代码约定的值。例如,大括号布局是一个明显的选择。
  2. 使用
    Code Cleanup
    feature(默认为
    Ctrl+E,C
    )将其应用到整个解决方案。选择最简单的内置“重新格式化代码”模板以最大程度地减少更改。
  3. 格式化并保存所有文件后,将 R# 规则恢复为原始状态并再次运行
    Code Cleanup
之后,所有

*.cs

 文件都应以 UTF-8 格式保存(对于 R# 支持的其他文件类型也是如此)。漂亮的格式作为奖励。


2
投票
回复。 #1:有选项

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

但这并不

总是。看来没有办法强制执行此操作(并且没有可能的扩展)。有没有考虑过写一个扩展:-) ?

回复。 #2:使用 PSH 应该是可行的(但没有最终的行尾可能会扰乱最简单的方法)。但是请参阅

https://stackoverflow.com/a/850751/67392

编辑:这似乎是一个常见的请求(请参阅用户声音)。该用户语音的评论之一要求在 VS2017 中您可以使用 .editorconfig

 设置文件的默认编码。


0
投票
Powershell 5.1 脚本,在源根目录中运行

Get-ChildItem -Include *.cs -Recurse | ForEach-Object { $file = $_.FullName $mustReWrite = $false # Try to read as UTF-8 first and throw an exception if # invalid-as-UTF-8 bytes are encountered. try { [IO.File]::ReadAllText($file,[Text.Utf8Encoding]::new($false, $true)) } catch [System.Text.DecoderFallbackException] { # Fall back to Windows-1250 $content = [IO.File]::ReadAllText($file,[Text.Encoding]::GetEncoding(1250)) $mustReWrite = $true } # Rewrite as UTF-8 without BOM (the .NET frameworks' default) if ($mustReWrite) { Write "Converting from 1250 to UTF-8" [IO.File]::WriteAllText($file, $content) } else { Write "Already UTF-8-encoded" } }
    

0
投票
目前最有效的解决方案是:

  1. .cs
     部分的 
    .editorconfig
     文件中设置 
    .cs
     文件的编码:
[*.cs] charset = utf-8

    运行
  1. dotnet format工具: dotnet format
    
    
就是这样。

(我最初将其作为评论发布,但 Ilya Chumakov 建议将其作为答案)

© www.soinside.com 2019 - 2024. All rights reserved.