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 eu une solution avec des encodages mixtes et je veux les rendre tous identiques (UTF-8 avec signature).
Je sais comment enregistrer des fichiers uniques, mais qu'en est-il de tous les fichiers d'un projet?
visual-studio
utf-8
character-encoding
jesperlind
la source
la source
GlobalSuppressions.cs
est UTF-16.Réponses:
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)) { string 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 :-)
la source
Cela peut être utile.
Version courte: modifiez un fichier, sélectionnez Fichier -> Options d'enregistrement avancées. Au lieu de changer UTF-8 en Ascii, changez-le en UTF-8. Modifier: assurez-vous de sélectionner l'option qui dit pas de marqueur d'ordre des octets (BOM)
Définissez la page de codes et appuyez sur OK. Il semble persister juste après le fichier actuel.
la source
Au cas où vous auriez besoin de le faire dans PowerShell, voici mon petit geste:
la source
Je convertirais les fichiers par programme (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 sont pas dans "UTF-8 avec signature" sont dans la page de codes ANSI - c'est la même chose que VS 2008 suppose apparemment également. Si vous savez que certains fichiers ont encore des encodages différents, vous devrez spécifier quels sont ces encodages.
la source
En utilisant C #:
1) Créez une nouvelle ConsoleApplication, puis installez Mozilla Universal Charset Detector
2) Exécutez le code:
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; } }
la source
J'ai créé une fonction pour changer les fichiers d'encodage écrits dans asp.net. J'ai beaucoup cherché. Et j'ai également utilisé quelques idées et codes de cette page. Merci.
Et voici la fonction.
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
Il peut être placé dans un fichier .aspx puis appelé comme:
la source
si vous utilisez TFS avec VS: http://msdn.microsoft.com/en-us/library/1yft8zkw(v=vs.100).aspx Exemple:
la source
Merci pour vos solutions, ce code a fonctionné pour moi:
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
la source
Si vous souhaitez éviter ce type d'erreur:
Utilisez ce code suivant:
Le numéro de codage 1252 est le codage Windows par défaut utilisé par Visual Studio pour enregistrer vos fichiers.
la source
Passer de UTF-8-BOM à UTF-8
En s'appuyant sur la réponse de rasx , voici une fonction PowerShell qui suppose que vos fichiers actuels sont déjà encodés en UTF-8 (mais peut-être avec BOM) et les convertit en UTF-8 sans BOM, préservant ainsi les caractères Unicode existants.
la source
Je ne propose cette suggestion qu'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):
la source
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 ont été encodés en ANSI, mais ils contenaient du contenu UTF8 et ont été reconnus en tant que fichiers ANSI dans VS2015. J'ai essayé de nombreuses tactiques de conversion, mais n'a fonctionné que cette solution.
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); }
la source
l'élément est supprimé du menu dans Visual Studio 2017 Vous pouvez toujours accéder à la fonctionnalité via Fichier-> Enregistrer sous -> puis en cliquant sur la flèche vers le bas sur le bouton Enregistrer et en cliquant sur "Enregistrer avec encodage ...".
Vous pouvez également l'ajouter au menu Fichier via Outils-> Personnaliser-> Commandes si vous le souhaitez.
la source