Eu me pergunto se é possível salvar todos os arquivos em um projeto do Visual Studio 2008 em uma codificação de caracteres específica. Consegui uma solução com codificações mistas e quero torná-las todas iguais (UTF-8 com assinatura).
Eu sei como salvar arquivos individuais, mas e todos os arquivos em um projeto?
visual-studio
utf-8
character-encoding
Jesperlind
fonte
fonte
GlobalSuppressions.cs
é UTF-16.Respostas:
Já que você já está no Visual Studio, por que não 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 :-)
fonte
Isto pode ser de alguma ajuda.
Versão resumida: edite um arquivo, selecione Arquivo -> Opções avançadas de salvamento. Em vez de alterar UTF-8 para Ascii, altere-o para UTF-8. Editar: certifique-se de selecionar a opção que diz sem marcador de ordem de byte (BOM)
Defina a página de código e clique em OK. Parece persistir logo após o arquivo atual.
fonte
Caso você precise fazer isso no PowerShell, aqui está meu pequeno movimento:
fonte
Gostaria de converter os arquivos programaticamente (fora do 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 que todos os arquivos que não estão em "UTF-8 com assinatura" estão na página de código ANSI - é o mesmo que o VS 2008 aparentemente também assume. Se você sabe que alguns arquivos ainda possuem codificações diferentes, você terá que especificar quais são essas codificações.
fonte
Usando C #:
1) Crie um novo ConsoleApplication e instale o Mozilla Universal Charset Detector
2) Execute o código:
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; } }
fonte
Eu criei uma função para alterar os arquivos de codificação escritos em asp.net. Eu procurei muito. E também usei algumas ideias e códigos desta página. Obrigado.
E aqui está 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
Ele pode ser colocado em um arquivo .aspx e, em seguida, chamado como:
fonte
se você estiver usando TFS com VS: http://msdn.microsoft.com/en-us/library/1yft8zkw(v=vs.100).aspx Exemplo:
fonte
Obrigado por suas soluções, este código funcionou 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
fonte
Se você quiser evitar esse tipo de erro:
Use este código a seguir:
O número de codificação 1252 é a codificação padrão do Windows usada pelo Visual Studio para salvar seus arquivos.
fonte
Converter de UTF-8-BOM em UTF-8
Com base na resposta do rasx , aqui está uma função do PowerShell que assume que seus arquivos atuais já estão codificados em UTF-8 (mas talvez com BOM) e os converte em UTF-8 sem BOM, preservando, portanto, os caracteres Unicode existentes.
fonte
Estou apenas oferecendo esta sugestão caso não haja uma maneira de fazer isso automaticamente no Visual Studio (nem tenho certeza se isso funcionaria):
fonte
Experimentou problemas de codificação após a conversão da solução de VS2008 para VS2015. Após a conversão, todos os arquivos do projeto foram codificados em ANSI, mas continham conteúdo UTF8 e foram reconhecidos como arquivos ANSI no VS2015. Tentei muitas táticas de conversão, mas funcionou 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); }
fonte
o item é removido do menu no Visual Studio 2017 Você ainda pode acessar a funcionalidade por meio de Arquivo-> Salvar como -> clicando na seta para baixo no botão Salvar e clicando em "Salvar com codificação ...".
Você também pode adicioná-lo de volta ao menu Arquivo através de Ferramentas-> Personalizar-> Comandos se desejar.
fonte