Как сделать Encoding Configurable для передачи параметров в Encoding.GetEncoding (string encdng)? - PullRequest
0 голосов
/ 23 апреля 2020

Это продолжение моего предыдущего вопроса: Невозможно преобразовать специальные символы в файле UTF-8 в ANSI

Требование (C# Windows Служба с использованием . NET Framework 4.6.1 ):

У меня есть объект StreamReader & StreamWriter, который читает файл и создает новый файл. Я жестко закодировал кодировки, я получил рекомендацию (во время экспертной проверки) сделать их настраиваемыми (добавлены ключи в app.config)

- я не думаю, что нам нужно было бы их менять кодировки, но мне было любопытно, как сделать его настраиваемым.

Мой код работает нормально (так как есть небольшая вероятность наличия символов LATIN в моем файле) с:

StreamReader использует Encoding.Default

StreamWriter использует Encoding.GetEncoding("UTF-8")

Из моего кода теста:

static void Main(string[] args)
    {
        try
        {
            string processFilePath = @"D:\ENCODING\File1.DAT";
            string outfile = @"D:\ENCODING\File2.txt";
            string readerEncoding = "ASCII";  //this 'll be taken from the app.config
            string writerEncoding = "UTF-8";  //this 'll be taken from the app.config

            using (StreamReader reader = new StreamReader(processFilePath, Encoding.GetEncoding(readerEncoding)))
            {
                using (StreamWriter writer = new StreamWriter(outfile, true, Encoding.GetEncoding(writerEncoding)))
                {
                    writer.WriteLine(reader.ReadToEnd());
                }
            }
            Console.WriteLine("Done");

        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }

        Console.Read();

    }

    public static FileStream ReadFile(string filepath)
    {
        return File.Open(filepath, FileMode.Open, FileAccess.Read, FileShare.None);
    }

Мой вопрос: - Есть ли документ сопоставления, где я могу найти эквивалент различных типов кодирования, например. Encoding.Default похоже на Encoding.GetEncoding("ASCII") (хотя это не так, но я надеюсь, что вы поняли мою точку зрения)

Потому что я должен использовать Encoding.GetEncoding("XXXXX"), а не Encoding.Default или Encoding.UTF8 или любую другую предварительно определенную кодировку. Все, что находится в файле конфигурации, следует использовать вместо «XXXXX» в Encoding.GetEncoding("XXXXX")

...