我想知道是否可以将Visual Studio 2008项目中的所有文件保存为特定的字符编码.我得到了一个混合编码的解决方案,我想让它们都一样(带签名的UTF-8).
我知道如何保存单个文件,但项目中的所有文件怎么样?
由于您已经在Visual Studio中,为什么不只是简单地编写代码?
foreach (var f in new DirectoryInfo(@"...").GetFiles("*.cs", SearchOption.AllDirectories)) {
string s = File.ReadAllText(f.FullName);
File.WriteAllText (f.FullName, s, Encoding.UTF8);
}
只有三行代码!我相信你可以在不到一分钟内写出来:-)
这可能会有所帮助.
由于原始引用被垃圾网站破坏而删除了链接.
短版:编辑一个文件,选择文件 - >高级保存选项.而不是将UTF-8更改为Ascii,将其更改为UTF-8.编辑:确保选择没有字节顺序标记(BOM)的选项
设置代码页并点击确定.它似乎只是暂存在当前文件之后.
如果您需要在PowerShell中执行此操作,请执行以下操作:
Function Write-Utf8([string] $path, [string] $filter='*.*') { [IO.SearchOption] $option = [IO.SearchOption]::AllDirectories; [String[]] $files = [IO.Directory]::GetFiles((Get-Item $path).FullName, $filter, $option); foreach($file in $files) { "Writing $file..."; [String]$s = [IO.File]::ReadAllText($file); [IO.File]::WriteAllText($file, $s, [Text.Encoding]::UTF8); } }
我会以编程方式(在VS之外)转换文件,例如使用Python脚本:
import glob, codecs
for f in glob.glob("*.py"):
data = open("f", "rb").read()
if data.startswith(codecs.BOM_UTF8):
# Already UTF-8
continue
# else assume ANSI code page
data = data.decode("mbcs")
data = codecs.BOM_UTF8 + data.encode("utf-8")
open("f", "wb").write(data)
这假设所有不在"带签名的UTF-8"的文件都在ANSI代码页中 - 这与VS 2008显然也假设的相同.如果您知道某些文件具有不同的编码,则必须指定这些编码是什么.