Salve todos os arquivos no projeto Visual Studio como UTF-8

votos
73

Gostaria de saber se é possível salvar todos os arquivos em um projeto Visual Studio 2008 em uma codificação de caracteres específico. Eu tenho uma solução com codificações mistas e quero torná-los todos a mesma (UTF-8 com assinatura).

Eu sei como salvar arquivos individuais, mas como sobre todos os arquivos em um projeto?

Publicado 11/11/2008 em 01:31
fonte usuário
Em outras línguas...                            


14 respostas

votos
61

Como você já está no Visual Studio, porque não basta simplesmente escrever o código?

foreach (var f in new DirectoryInfo(@"...").GetFiles("*.cs", SearchOption.AllDirectories)) {
  string s = File.ReadAllText(f.FullName);
  File.WriteAllText (f.FullName, s, Encoding.UTF8);
}

Apenas três linhas de código! Tenho certeza que você pode escrever isso em menos de um minuto :-)

Respondeu 12/05/2009 em 02:26
fonte usuário

votos
37

Isto pode ser de alguma ajuda.

ligação removido devido a referência original a ser desfigurado por site de spam.

Versão curta: editar um arquivo, selecione Arquivo -> Salvar opções avançadas. Em vez de mudar UTF-8 para ASCII, alterá-lo para UTF-8. Edit: Certifique-se de que você selecione a opção que diz que não byte-order-marcador (BOM)

Definir página de código e bateu ok. Parece persistir apenas após o arquivo atual.

Respondeu 13/04/2010 em 22:21
fonte usuário

votos
10

No caso de você precisar fazer isso no PowerShell, aqui é o meu pequeno movimento:

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);
    }
}
Respondeu 25/08/2009 em 06:07
fonte usuário

votos
7

Gostaria de converter os arquivos de programação (fora VS), por exemplo, usando um script 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)

Isso pressupõe todos os arquivos não em "UTF-8 com assinatura" são na página de código ANSI - este é o mesmo que VS 2008, aparentemente, também assume. Se você sabe que alguns arquivos ainda codificações diferentes, você teria que especificar o que essas codificações são.

Respondeu 11/11/2008 em 09:24
fonte usuário

votos
3

Usando C #:
1) Criar um novo ConsoleApplication, em seguida, instalar Mozilla Universal Charset Detector
código 2) Run:

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;
    }
}
Respondeu 19/03/2015 em 07:07
fonte usuário

votos
1

Se você quiser evitar esse tipo de erro:

digite descrição da imagem aqui

Utilize este código a seguir:

foreach (var f in new DirectoryInfo(@"....").GetFiles("*.cs", SearchOption.AllDirectories))
            {
                string s = File.ReadAllText(f.FullName, Encoding.GetEncoding(1252));
                File.WriteAllText(f.FullName, s, Encoding.UTF8);
            }

Codificação de número 1.252 é a codificação padrão do Windows usado pelo Visual Studio para salvar seus arquivos.

Respondeu 09/02/2017 em 17:32
fonte usuário

votos
1

se você estiver usando TFS com VS: http://msdn.microsoft.com/en-us/library/1yft8zkw(v=vs.100).aspx Exemplo:

tf checkout -r -type:utf-8 src/*.aspx
Respondeu 13/08/2013 em 11:31
fonte usuário

votos
1

Eu criei uma função para alterar a codificação de arquivos escritos em asp.net. Eu procurei muito. E eu também usou algumas idéias e códigos desta página. Obrigado.

E aqui é a função.

  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

Pode colocado em arquivo .aspx e, em seguida, chamado assim:

ChangeFileEncoding("C:\temp\test", "*.ascx", IO.SearchOption.TopDirectoryOnly)
Respondeu 10/01/2012 em 08:07
fonte usuário

votos
1

Obrigado por suas soluções, este código tem trabalhado para mim:

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
Respondeu 22/02/2010 em 19:38
fonte usuário

votos
0

Converter de UTF-8 BOM para UTF-8

Com base na resposta de rasx , aqui é uma função PowerShell que assume seus arquivos atuais já são codificados em UTF-8 (mas talvez com BOM) e os converte em UTF-8 sem BOM, portanto, preservar caracteres Unicode existentes.

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, [Text.Encoding]::UTF8);
        [Text.Encoding]$e = New-Object -TypeName Text.UTF8Encoding -ArgumentList ($false);
        [IO.File]::WriteAllText($file, $s, $e);
    }
}
Respondeu 08/10/2019 em 16:11
fonte usuário

votos
0

o item é removido do menu no Visual Studio 2017 Você ainda pode acessar a funcionalidade através Arquivo-> Salvar como -> em seguida, clicando na seta para baixo no botão Salvar e clicar em "Guardar com codificação ...".

Você também pode adicioná-lo de volta para o menu Arquivo através de Ferramentas-> Customize-> Comandos se você quiser.

Respondeu 13/12/2018 em 20:56
fonte usuário

votos
0

adaptado a versão acima para fazê-lo funcionar.

// important! create a utf8 encoding that explicitly writes no BOM            
var utf8nobom = new UTF8Encoding(false); 
foreach (var f in new DirectoryInfo(dir).GetFiles("*.*", SearchOption.AllDirectories))
{
    string text = File.ReadAllText(f.FullName);
    File.WriteAllText(f.FullName, text, utf8nobom);
}
Respondeu 08/03/2017 em 17:53
fonte usuário

votos
0

problemas de codificação experimentado após a conversão de uma solução de VS2008 para VS2015. Após a conversão de todos os arquivos do projeto foi codificado em ANSI, mas eles continham conteúdo UTF8 e foi recongnized como arquivos ANSI no VS2015. Tentou muitas táticas de conversão, mas trabalhou apenas esta solução.

 Encoding encoding = Encoding.Default;
 String original = String.Empty;
 foreach (var f in new DirectoryInfo(path).GetFiles("*.cs", SearchOption.AllDirectories))
 {
    using (StreamReader sr = new StreamReader(f.FullName, Encoding.Default))
    {
       original = sr.ReadToEnd();
       encoding = sr.CurrentEncoding;
       sr.Close();
    }
    if (encoding == Encoding.UTF8)
       continue;
    byte[] encBytes = encoding.GetBytes(original);
    byte[] utf8Bytes = Encoding.Convert(encoding, Encoding.UTF8, encBytes);
    var utf8Text = Encoding.UTF8.GetString(utf8Bytes);

    File.WriteAllText(f.FullName, utf8Text, Encoding.UTF8);
 }
Respondeu 28/08/2015 em 07:05
fonte usuário

votos
0

Eu só estou oferecendo esta sugestão no caso não há nenhuma maneira de fazer isso automaticamente no Visual Studio (eu nem tenho certeza que isso iria funcionar):

  1. Crie uma classe em seu projeto chamado 足の不自由なハッキング(ou algum outro texto unicode que irá forçar o Visual Studio para codificar como UTF-8).
  2. Adicionar "usando MyProject. 足の不自由なハッキング"; ao topo de cada arquivo. Você deve ser capaz de fazê-lo em tudo, fazendo uma substituição global de "using System.Text;" com "using System.Text; usando MyProject. 足の不自由なハッキング;".
  3. Salve tudo. Você pode obter uma longa seqüência de "Você quer salvar X.cs usando UTF-8?" mensagens ou algo assim.
Respondeu 11/11/2008 em 01:55
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more