Это продолжение моего предыдущего вопроса: Невозможно преобразовать специальные символы в файле 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")