Archiv der ‘Programmieren’ Kategorie

Ansi nach UTF-8 Converter

28. Februar 2009

Nach langer Zeit mal wieder ein neuer Blogeintrag :)

Nachdem ich den Webserver wechseln musste, wurde auch gleichzeitig der Apache auf UTF-8 umgestellt, so dass ich meine gesamten Seiten konvertieren musste. Da ich dieses nicht von Hand erledigen wollte schrieb ich mir ein Programm, was dieses für mich erledigt:

Dieses wird mit einem Eingabepfad aufgerufen und durchsucht alle Dateien in dem Ordner nach den in einem Array angegebenen Dateiextensions. Wird eine gefunden, wird diese konvertiert. Entsprechendes gilt auch für alle Unterordner von dem gegebenem Pfad. Da ich nicht alle Ordner erneut uploaden wollte, hab ich mir ausgeben lassen in welchen Unterordnern Dateien verändert worden sind.

class Converter
    {
        static Encoding sourceEncoding = Encoding.GetEncoding(1252);
        static Encoding destinationEncoding = Encoding.UTF8;
        static string[] extensions = new string[] { ".tpl", ".htm" };
 
        static void Encode(string filename)
        {
            StreamReader reader = new StreamReader(filename, sourceEncoding);
            string content = reader.ReadToEnd();
            reader.Close();
 
            StreamWriter writer = new StreamWriter(filename, false, destinationEncoding);
            writer.Write(content);
            writer.Flush();
            reader.Close();
        }
 
        static void RecursiveReader(string path)
        {
            DirectoryInfo info = new DirectoryInfo(path);
 
            DirectoryInfo[] subDirs = info.GetDirectories();
            FileInfo[] files = info.GetFiles();
            bool ouputDirectoryName = true;
 
            foreach (FileInfo file in files)
            {
                foreach (string extension in extensions)
                {
                    if (file.Extension.ToLower().Equals(extension))
                    {
                        Encode(file.FullName);
                        if (ouputDirectoryName)
                        {
                            Console.WriteLine("At least one file was converted in path: {0}.", path);
                            ouputDirectoryName = false;
                        }
                        continue;
                    }
                }
            }
 
            foreach (DirectoryInfo dir in subDirs)
            {
                RecursiveReader(dir.FullName);
            }
 
        }
 
        static void Main(string[] args)
        {
            RecursiveReader(@"c:\ToConvert\");
            Console.ReadLine();
        }
    }

Sourcecode: ANSItoUTF-8Converter.cs

MfG
Marco