在 VisualStudio 中将所有 *.cs 文件转换为 unicode
Convert all *.cs files to unicode in VisualStudio
我的团队不关注文件编码(这是正确的,因为人类不应该被文件编码打扰)。然而,有些文件以 utf8 格式保存,有些以区域编码 (cp1250) 格式保存。
我需要做两件事:
- 对将来创建的所有文件强制使用 utf8
- 将所有具有给定扩展名(或至少 *.cs)的现有文件转换为 utf-8
如何使用 Visual-Studio、Resharper 插件或 Powershell 实现这些目标?
我尝试使用 PowerShell 执行 #2,但它很乱(有时 removes/adds 最后一行)。可能有一些免费软件可以用来做这件事,第 1 点对我来说更重要。
回复。 #1: 有选项
Environment | Documents | Save documents as Unicode when data cannot be saved in codepage
但这并不总是。似乎没有办法强制执行此操作(也没有可能的扩展)。有没有考虑过写一个扩展:-)?
回复。 #2:它应该可以用 PSH 实现(但没有最后一行可能会搞乱最简单的方法)。但是请参阅
编辑:这似乎是一个常见的请求(参见User Voice)。关于该用户语音的评论之一要求在 VS2017 中您可以使用 .editorconfig
设置文件的默认编码。
是的,有可能。
对所有文件强制使用 UTF-8
使用前面提到的@Richard .editorconfig
。从 Visual Studio v15.3 开始,.editorconfig
支持得到修复和改进。这个解决方案级别的简单 .editorconfig
足以确保每个 *.cs
都保存在没有 BOM 的 UTF-8 中 :
root = true
[*.cs]
charset = utf-8
此外,它会转换由 Visual Studio 手动打开和保存的任何现有文件。
将所有现有代码文件转换为 UTF-8
我测试了线程 Save all files in Visual Studio project as UTF-8 中的一些答案,但它们的效果很差:非拉丁字符(在我的例子中是西里尔字母)已被转换成不可读的字形。相反,Visual Studio 本身可以完美地进行 "open-save" 转换。
要自动打开并重新保存解决方案中的所有代码文件,请使用一个简单的 R# 技巧:
- 将适用于所有文件的任何 R# 代码样式规则设置为严格拒绝贵公司代码约定的值。例如,大括号布局是一个明显的选择。
- 使用
Code Cleanup
feature(默认为 Ctrl+E,C
)将其应用于整个解决方案。选择最简单的内置 "Reformat Code" 模板以尽量减少更改。
- 所有文件都格式化并保存后,将 R# 规则还原为原始规则并再次 运行
Code Cleanup
。
之后所有 *.cs
文件都应保存为 UTF-8(对于 R# 支持的其他文件类型也是如此)。漂亮的格式作为奖励。
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"
}
}
我的团队不关注文件编码(这是正确的,因为人类不应该被文件编码打扰)。然而,有些文件以 utf8 格式保存,有些以区域编码 (cp1250) 格式保存。
我需要做两件事:
- 对将来创建的所有文件强制使用 utf8
- 将所有具有给定扩展名(或至少 *.cs)的现有文件转换为 utf-8
如何使用 Visual-Studio、Resharper 插件或 Powershell 实现这些目标?
我尝试使用 PowerShell 执行 #2,但它很乱(有时 removes/adds 最后一行)。可能有一些免费软件可以用来做这件事,第 1 点对我来说更重要。
回复。 #1: 有选项
Environment | Documents | Save documents as Unicode when data cannot be saved in codepage
但这并不总是。似乎没有办法强制执行此操作(也没有可能的扩展)。有没有考虑过写一个扩展:-)?
回复。 #2:它应该可以用 PSH 实现(但没有最后一行可能会搞乱最简单的方法)。但是请参阅
编辑:这似乎是一个常见的请求(参见User Voice)。关于该用户语音的评论之一要求在 VS2017 中您可以使用 .editorconfig
设置文件的默认编码。
是的,有可能。
对所有文件强制使用 UTF-8
使用前面提到的@Richard .editorconfig
。从 Visual Studio v15.3 开始,.editorconfig
支持得到修复和改进。这个解决方案级别的简单 .editorconfig
足以确保每个 *.cs
都保存在没有 BOM 的 UTF-8 中 :
root = true
[*.cs]
charset = utf-8
此外,它会转换由 Visual Studio 手动打开和保存的任何现有文件。
将所有现有代码文件转换为 UTF-8
我测试了线程 Save all files in Visual Studio project as UTF-8 中的一些答案,但它们的效果很差:非拉丁字符(在我的例子中是西里尔字母)已被转换成不可读的字形。相反,Visual Studio 本身可以完美地进行 "open-save" 转换。
要自动打开并重新保存解决方案中的所有代码文件,请使用一个简单的 R# 技巧:
- 将适用于所有文件的任何 R# 代码样式规则设置为严格拒绝贵公司代码约定的值。例如,大括号布局是一个明显的选择。
- 使用
Code Cleanup
feature(默认为Ctrl+E,C
)将其应用于整个解决方案。选择最简单的内置 "Reformat Code" 模板以尽量减少更改。 - 所有文件都格式化并保存后,将 R# 规则还原为原始规则并再次 运行
Code Cleanup
。
之后所有 *.cs
文件都应保存为 UTF-8(对于 R# 支持的其他文件类型也是如此)。漂亮的格式作为奖励。
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"
}
}