Интересно, можно ли сохранить все файлы в проекте Visual Studio 2008 в определенной кодировке символов. У меня есть решение со смешанными кодировками, и я хочу сделать их одинаковыми (UTF-8 с подписью).
Я знаю, как сохранять отдельные файлы, но как насчет всех файлов в проекте?
visual-studio
utf-8
character-encoding
Джесперлинд
источник
источник
GlobalSuppressions.cs
это UTF-16.Ответы:
Поскольку вы уже работаете в Visual Studio, почему бы просто не написать код?
foreach (var f in new DirectoryInfo(@"...").GetFiles("*.cs", SearchOption.AllDirectories)) { string s = File.ReadAllText(f.FullName); File.WriteAllText (f.FullName, s, Encoding.UTF8); }
Всего три строчки кода! Я уверен, что вы сможете написать это меньше чем за минуту :-)
источник
Это может помочь.
Краткая версия: отредактируйте один файл, выберите File -> Advanced Save Options. Вместо того, чтобы менять UTF-8 на Ascii, измените его на UTF-8. Изменить: убедитесь, что вы выбрали параметр, который говорит, что маркер порядка байтов (BOM)
Установите кодовую страницу и нажмите ОК. Кажется, что он сохраняется только после текущего файла.
источник
Если вам нужно сделать это в PowerShell, вот мой маленький ход:
источник
Я бы преобразовал файлы программно (вне VS), например, используя скрипт 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)
Это предполагает, что все файлы не в «UTF-8 с подписью» находятся на кодовой странице ANSI - это то же самое, что, по-видимому, предполагает и VS 2008. Если вы знаете, что некоторые файлы имеют разные кодировки, вам необходимо указать, что это за кодировки.
источник
Использование C #:
1) Создайте новое ConsoleApplication, затем установите Mozilla Universal Charset Detector
2) Выполните код:
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; } }
источник
Я создал функцию для изменения файлов кодировки, написанных на asp.net. Я много искал. И я также использовал некоторые идеи и коды с этой страницы. Спасибо.
А вот и функция.
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
Его можно поместить в файл .aspx и затем вызвать так:
источник
если вы используете TFS с VS: http://msdn.microsoft.com/en-us/library/1yft8zkw(v=vs.100).aspx Пример:
источник
Спасибо за ваши решения, этот код у меня сработал:
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
источник
Если вы хотите избежать ошибок этого типа:
Используйте следующий код:
Кодировка номер 1252 - это кодировка Windows по умолчанию, используемая Visual Studio для сохранения ваших файлов.
источник
Преобразование из UTF-8-BOM в UTF-8
Основываясь на ответе rasx , вот функция PowerShell, которая предполагает, что ваши текущие файлы уже закодированы в UTF-8 (но, возможно, с спецификацией), и преобразует их в UTF-8 без спецификации, тем самым сохраняя существующие символы Unicode.
источник
Я предлагаю это предложение только на тот случай, если в Visual Studio нет возможности сделать это автоматически (я даже не уверен, что это сработает):
источник
Возникли проблемы с кодированием после преобразования решения из VS2008 в VS2015. После преобразования все файлы проекта были закодированы в ANSI, но они содержали контент UTF8 и были преобразованы в файлы ANSI в VS2015. Пробовал много тактик конверсии, но сработал только это решение.
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); }
источник
этот элемент удален из меню в Visual Studio 2017. Вы по-прежнему можете получить доступ к функциям, выбрав «Файл» -> «Сохранить как» ->, затем щелкнув стрелку вниз на кнопке «Сохранить» и выбрав «Сохранить с кодировкой ...».
Вы также можете добавить его обратно в меню «Файл» через Инструменты-> Настроить-> Команды, если хотите.
источник