Программирование ... // © Rabusov Online Service. 2004 // Рабусов С.В.
Живые и Твёрдые Издательский Дом Коммерсантъ
Аудиокниги // AudioBooks

Преобразование ANSI файлов в UTF-8

Программы преобразования очень проста. В качестве параметров ей надо передать имя файла или список имён файлов. Все они будут преобразованы в UTF-8. В дополнение к этому, производится замена строки windows-1251 на utf-8. Сделано это для того, чтобы при конвертации файлов с разметкой XML, производилась замена в значении параметра encoding.
В коде продемонстрирован построчный доступ к содержимому файла. 

Архив с программой ansi2utf-8.zip (3kb)
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;

namespace ansi2utf_8
{
	class Program
	{
	    static void Main(string[] args)
	    {
            if ((args == null) || (args.Length == 0))
            {
                System.Console.WriteLine("Attention!");
                System.Console.WriteLine("This program converts files from ANSI to UTF-8.");
                System.Console.WriteLine("written by Rabusov Sergey. 2010\n");
                System.Console.WriteLine("Syntax:");
                System.Console.WriteLine("\t" + Environment.CommandLine + " [list_of_filenames]");
            } else
		foreach (string filename in args)
		{
				    int len = filename.Length;
				    string tmp;
				    byte[] ansiBytes, utf8Bytes;
				    char[] utf8Chars;
                    /// 
                    if (File.Exists(filename))
                    {
                        string[] stringlist = File.ReadAllLines(filename, Encoding.GetEncoding(1251));
                        /// в него же и запишем // so write to itself
                        StreamWriter sw = new StreamWriter(filename, false, Encoding.UTF8);
                        // пройдём по всем строкам файла // go through all the lines from the file
                        foreach (string line in stringlist)
                        {
                            // берём очередную строку // get a next line
                            tmp = line;
                            if (line.IndexOf("windows-1251") > -1)
                            {
                                tmp = tmp.Replace("windows-1251", "utf-8");
                            }
                            ansiBytes = Encoding.GetEncoding(1251).GetBytes(tmp);
                            utf8Bytes = Encoding.Convert(Encoding.GetEncoding(1251), Encoding.UTF8, ansiBytes);

                            utf8Chars = new char[Encoding.UTF8.GetCharCount(utf8Bytes, 0, utf8Bytes.Length)];
                            Encoding.UTF8.GetChars(utf8Bytes, 0, utf8Bytes.Length, utf8Chars, 0);
                            tmp = new string(utf8Chars);
                            // пишем посточно // write it line by line
                            sw.WriteLine(tmp);
                        } // foreach line is stringlist
                        sw.Close();
                    }
                    else {
                        System.Console.WriteLine(filename + " - file not found");
                    }
		} // foreach filename in args
	    } // main & if
	} // class
} // namespace
Рейтинг@Mail.ru Фотограф Фотограф Рабусов С.В. ссср