Enregistrer tous les fichiers dans le projet Visual Studio en tant que UTF-8

Je me demande s’il est possible d’enregistrer tous les fichiers d’un projet Visual Studio 2008 dans un encodage de caractères spécifique. J’ai une solution avec des encodages mixtes et je veux les rendre tous identiques (UTF-8 avec signature).

Je sais comment enregistrer des fichiers individuels, mais qu’en est-il de tous les fichiers d’un projet?

Puisque vous êtes déjà dans Visual Studio, pourquoi ne pas simplement écrire le code?

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

Seulement trois lignes de code! Je suis sûr que vous pouvez écrire ceci en moins d’une minute 🙂

Cela peut être utile.

le lien a été supprimé en raison de la dégradation de la référence d’origine par le site de spam.

Version courte: éditez un fichier, sélectionnez Fichier -> Options de sauvegarde avancées. Au lieu de changer UTF-8 en Ascii, changez-le en UTF-8. Modifier: assurez-vous de sélectionner l’option indiquant l’absence de marqueur de nom d’octet (BOM)

Définissez la page de code et appuyez sur OK. Il semble persister juste après le fichier en cours.

Si vous devez le faire dans PowerShell, voici mon petit geste:

 Function Write-Utf8([ssortingng] $path, [ssortingng] $filter='*.*') { [IO.SearchOption] $option = [IO.SearchOption]::AllDirectories; [Ssortingng[]] $files = [IO.Directory]::GetFiles((Get-Item $path).FullName, $filter, $option); foreach($file in $files) { "Writing $file..."; [Ssortingng]$s = [IO.File]::ReadAllText($file); [IO.File]::WriteAllText($file, $s, [Text.Encoding]::UTF8); } } 

Je convertirais les fichiers par programmation (en dehors de VS), par exemple en utilisant un 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) 

Cela suppose que tous les fichiers qui ne figurent pas dans “UTF-8 with signature” se trouvent dans la page de codes ANSI – c’est la même chose que suppose apparemment VS 2008. Si vous savez que certains fichiers ont encore des encodages différents, vous devrez spécifier quels sont ces encodages.

En utilisant C #:
1) Créez une nouvelle ConsoleApplication, puis installez Mozilla Universal Charset Detector
2) Code d’exécution:

 static void Main(ssortingng[] args) { const ssortingng targetEncoding = "utf-8"; foreach (var f in new DirectoryInfo(@"").GetFiles("*.cs", SearchOption.AllDirectories)) { var fileEnc = GetEncoding(f.FullName); if (fileEnc != null && !ssortingng.Equals(fileEnc, targetEncoding, SsortingngComparison.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 ssortingng GetEncoding(ssortingng 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; } } 

J’ai créé une fonction pour modifier les fichiers d’encodage écrits dans asp.net. J’ai cherché beaucoup. Et j’ai aussi utilisé des idées et des codes de cette page. Je vous remercie.

Et voici la fonction.

  Function ChangeFileEncoding(pPathFolder As Ssortingng, pExtension As Ssortingng, pDirOption As IO.SearchOption) As Integer Dim Counter As Integer Dim s As Ssortingng 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("
Saved #" & Counter & ": " & fi.FullName & " - Encoding was: " & gEnc.EncodingName & "") End If Next Return Counter End Function

Il peut être placé dans un fichier .aspx puis appelé comme:

 ChangeFileEncoding("C:\temp\test", "*.ascx", IO.SearchOption.TopDirectoryOnly) 

si vous utilisez TFS avec VS: http://msdn.microsoft.com/en-us/library/1yft8zkw(v=vs.100).aspx Exemple:

 tf checkout -r -type:utf-8 src/*.aspx 

Merci pour vos solutions, ce code a fonctionné pour moi:

 Dim s As Ssortingng = "" 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 

Si vous voulez éviter ce type d’erreur:

entrer la description de l'image ici

Utilisez le code suivant:

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

Le numéro d’encodage 1252 est l’encodage Windows par défaut utilisé par Visual Studio pour enregistrer vos fichiers.

Je propose uniquement cette suggestion au cas où il n’y aurait aucun moyen de le faire automatiquement dans Visual Studio (je ne suis même pas sûr que cela fonctionnerait):

  1. Créez une classe dans votre projet nommée 足 の 不 自由 な ハ ハ ハ キ or or (ou un autre texte Unicode qui forcera Visual Studio à encoder en UTF-8).
  2. Ajouter “en utilisant MyProject. 足 の 不 自由 な ハ ハ キ “; ” en haut de chaque fichier. Vous devriez pouvoir le faire sur tout en remplaçant globalement “using System.Text;” avec “using System.Text; using MyProject… 不 自由 な ハ ッ キ ン “; “.
  3. Tout sauver Vous pouvez obtenir une longue chaîne de caractères “Voulez-vous enregistrer X.cs en utilisant UTF-8?” des messages ou quelque chose.

Problèmes d’encodage expérimentés après la conversion de la solution de VS2008 à VS2015. Après la conversion, tous les fichiers de projet étaient encodés en ANSI, mais ils contenaient du contenu UTF8 et étaient reconnus comme fichiers ANSI dans VS2015. Essayé de nombreuses tactiques de conversion, mais n’a travaillé que cette solution.

  Encoding encoding = Encoding.Default; Ssortingng original = Ssortingng.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.GetSsortingng(utf8Bytes); File.WriteAllText(f.FullName, utf8Text, Encoding.UTF8); } 

adapter la version ci-dessus pour la faire fonctionner.

 // 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)) { ssortingng text = File.ReadAllText(f.FullName); File.WriteAllText(f.FullName, text, utf8nobom); }