90

Visual Studio 2008 プロジェクトのすべてのファイルを特定の文字エンコーディングで保存することは可能でしょうか。エンコーディングが混在するソリューションを取得しましたが、それらをすべて同じにしたいです(署名付きUTF-8)。

単一のファイルを保存する方法は知っていますが、プロジェクト内のすべてのファイルはどうですか?

4

13 に答える 13

77

既に 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);
}

コードはたったの3行!1分もかからずに書けると思います:-)

于 2009-05-12T01:26:04.087 に答える
39

これは役立つかもしれません。

元の参照がスパム サイトによって改ざんされたため、リンクが削除されました。

短いバージョン: 1 つのファイルを編集し、[ファイル] -> [高度な保存オプション] を選択します。UTF-8 を Ascii に変更する代わりに、UTF-8 に変更します。編集:バイトオーダーマーカー(BOM)がないというオプションを必ず選択してください

コード ページを設定し、[OK] をクリックします。現在のファイルを過ぎても持続しているようです。

于 2010-04-13T21:21:52.620 に答える
12

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);
    }
}
于 2009-08-25T05:07:26.927 に答える
8

たとえば、Pythonスクリプトを使用して、プログラムで(VSの外部で)ファイルを変換します。

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も想定しているものと同じです。一部のファイルのエンコーディングが異なることがわかっている場合は、これらのエンコーディングを指定する必要があります。

于 2008-11-11T08:24:03.370 に答える
6

C# を使用:
1) 新しい ConsoleApplication を作成し、Mozilla Universal Charset Detector
をインストールし ます。 2) コードを実行します。

static void Main(string[] args)
{
    const string targetEncoding = "utf-8";
    foreach (var f in new DirectoryInfo(@"<your project's path>").GetFiles("*.cs", SearchOption.AllDirectories))
    {
        var fileEnc = GetEncoding(f.FullName);
        if (fileEnc != null && !string.Equals(fileEnc, targetEncoding, StringComparison.OrdinalIgnoreCase))
        {
            var str = File.ReadAllText(f.FullName, Encoding.GetEncoding(fileEnc));
            File.WriteAllText(f.FullName, str, Encoding.GetEncoding(targetEncoding));
        }
    }
    Console.WriteLine("Done.");
    Console.ReadKey();
}

private static string GetEncoding(string filename)
{
    using (var fs = File.OpenRead(filename))
    {
        var cdet = new Ude.CharsetDetector();
        cdet.Feed(fs);
        cdet.DataEnd();
        if (cdet.Charset != null)
            Console.WriteLine("Charset: {0}, confidence: {1} : " + filename, cdet.Charset, cdet.Confidence);
        else
            Console.WriteLine("Detection failed: " + filename);
        return cdet.Charset;
    }
}
于 2015-03-19T07:07:07.067 に答える
1

asp.netで記述したエンコーディングファイルを変更する機能を作成しました。いろいろ探しました。また、このページのいくつかのアイデアとコードも使用しました。ありがとうございました。

そして、ここに関数があります。

  Function ChangeFileEncoding(pPathFolder As String, pExtension As String, pDirOption As IO.SearchOption) As Integer

    Dim Counter As Integer
    Dim s As String
    Dim reader As IO.StreamReader
    Dim gEnc As Text.Encoding
    Dim direc As IO.DirectoryInfo = New IO.DirectoryInfo(pPathFolder)
    For Each fi As IO.FileInfo In direc.GetFiles(pExtension, pDirOption)
        s = ""
        reader = New IO.StreamReader(fi.FullName, Text.Encoding.Default, True)
        s = reader.ReadToEnd
        gEnc = reader.CurrentEncoding
        reader.Close()

        If (gEnc.EncodingName <> Text.Encoding.UTF8.EncodingName) Then
            s = IO.File.ReadAllText(fi.FullName, gEnc)
            IO.File.WriteAllText(fi.FullName, s, System.Text.Encoding.UTF8)
            Counter += 1
            Response.Write("<br>Saved #" & Counter & ": " & fi.FullName & " - <i>Encoding was: " & gEnc.EncodingName & "</i>")
        End If
    Next

    Return Counter
End Function

.aspx ファイルに配置して、次のように呼び出すことができます。

ChangeFileEncoding("C:\temp\test", "*.ascx", IO.SearchOption.TopDirectoryOnly)
于 2012-01-10T07:07:50.040 に答える
1

あなたの解決策をありがとう、このコードは私のために働いています:

Dim s As String = ""
Dim direc As DirectoryInfo = New DirectoryInfo("Your Directory path")

For Each fi As FileInfo In direc.GetFiles("*.vb", SearchOption.AllDirectories)
    s = File.ReadAllText(fi.FullName, System.Text.Encoding.Default)
    File.WriteAllText(fi.FullName, s, System.Text.Encoding.Unicode)
Next
于 2010-02-22T18:38:21.310 に答える
1

VS で TFS を使用している場合: http://msdn.microsoft.com/en-us/library/1yft8zkw(v=vs.100).aspx 例:

tf checkout -r -type:utf-8 src/*.aspx
于 2013-08-13T10:31:50.727 に答える
-1
于 2008-11-11T00:55:57.800 に答える