Me pregunto si es posible guardar todos los archivos de un proyecto de Visual Studio 2008 en una codificación de caracteres específica. Obtuve una solución con codificaciones mixtas y quiero hacerlas todas iguales (UTF-8 con firma).
Sé cómo guardar archivos individuales, pero ¿qué hay de todos los archivos de un proyecto?
visual-studio
utf-8
character-encoding
jesperlind
fuente
fuente
GlobalSuppressions.cs
es UTF-16.Respuestas:
Dado que ya está en Visual Studio, ¿por qué no simplemente escribir el 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); }
¡Solo tres líneas de código! Estoy seguro de que puedes escribir esto en menos de un minuto :-)
fuente
Esto puede ser de alguna ayuda.
Versión corta: edite un archivo, seleccione Archivo -> Opciones avanzadas para guardar. En lugar de cambiar UTF-8 a Ascii, cámbielo a UTF-8. Editar: asegúrese de seleccionar la opción que dice sin marcador de orden de bytes (BOM)
Configure la página de códigos y presione Aceptar. Parece persistir justo después del archivo actual.
fuente
En caso de que necesite hacer esto en PowerShell, aquí está mi pequeño movimiento:
fuente
Convertiría los archivos mediante programación (fuera de VS), por ejemplo, usando un script de 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)
Esto supone que todos los archivos que no están en "UTF-8 con firma" están en la página de códigos ANSI; esto es lo mismo que aparentemente VS 2008 también asume. Si sabe que algunos archivos tienen codificaciones diferentes, deberá especificar cuáles son estas codificaciones.
fuente
Usando C #:
1) Cree una nueva aplicación de consola, luego instale Mozilla Universal Charset Detector
2) Ejecute el 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; } }
fuente
He creado una función para cambiar los archivos de codificación escritos en asp.net. Busqué mucho. Y también utilicé algunas ideas y códigos de esta página. Gracias.
Y aquí está la función.
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
Se puede colocar en un archivo .aspx y luego se llama como:
fuente
si está utilizando TFS con VS: http://msdn.microsoft.com/en-us/library/1yft8zkw(v=vs.100).aspx Ejemplo:
fuente
Gracias por sus soluciones, este código me ha funcionado:
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
fuente
Si quiere evitar este tipo de error:
Utilice este siguiente código:
El número de codificación 1252 es la codificación predeterminada de Windows que utiliza Visual Studio para guardar sus archivos.
fuente
Convertir de UTF-8-BOM a UTF-8
Sobre la base de la respuesta de rasx , aquí hay una función de PowerShell que asume que sus archivos actuales ya están codificados en UTF-8 (pero tal vez con BOM) y los convierte a UTF-8 sin BOM, por lo que conserva los caracteres Unicode existentes.
fuente
Solo estoy ofreciendo esta sugerencia en caso de que no haya forma de hacer esto automáticamente en Visual Studio (ni siquiera estoy seguro de que esto funcione):
fuente
Problemas de codificación experimentados después de convertir la solución de VS2008 a VS2015. Después de la conversión, todos los archivos del proyecto se codificaron en ANSI, pero contenían contenido UTF8 y se reconocieron como archivos ANSI en VS2015. Probé muchas tácticas de conversión, pero solo funcionó esta solución.
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); }
fuente
el elemento se elimina del menú en Visual Studio 2017. Aún puede acceder a la funcionalidad a través de Archivo-> Guardar como -> luego haciendo clic en la flecha hacia abajo en el botón Guardar y haciendo clic en "Guardar con codificación ...".
También puede volver a agregarlo al menú Archivo a través de Herramientas-> Personalizar-> Comandos si lo desea.
fuente