Сохранить специальные символы при записи всех строк в текстовый файл

У меня есть несколько строк, которые содержат специальные символы, такие как эти строки:

CommunautéFinancièreAfricaineBEACFranc (XAF) CommunautéFinancièreAfricaineBCEAOFranc (XOF)

Но когда я записываю эти строки в текстовый файл, я получаю в результате:

CFACommunaut Financi reAfricaineBEACFranc CFACommunaut Financi reAfricaineBCEAOFranc

Вот как я пишу строки:

File.WriteAllLines(@"c:\file5.txt", lines);

Я также попробовал 3-й параметр File.WriteAllLines() передавая Encoding, Но это тоже не помогло.

File.WriteAllLines(@"c:\file5.txt", lines, Encoding.UTF8);File.WriteAllLines(@"c:\file5.txt", lines, Encoding.ASCII);

Вот как я читаю все строки:

File.ReadAllLines(@"C:\file4.txt").ToList()
        .ForEach(g => 
            lines.Add(g.ToString()
            .Replace("/", string.Empty)
            .Replace("(", string.Empty)
            .Replace(")", string.Empty))
        );

Сумасшедшая вещь в том, что символы отлично отображаются в другом текстовом файле (file4.txt), где я все читаю.

1 ответ

Решение

Блокнот не распознает UTF-8, если вы не добавите спецификацию.

У вас есть три варианта:

  1. Решите, что блокнот тупой и проигнорируйте проблему. Лучшие редакторы распознают UTF-8.
  2. Добавить спецификацию использование var utf8WithBom = new Utf8Encoding(true, true) в качестве второго аргумента.
  3. Используйте устаревшую кодировку. Уточнить Encoding.Default в качестве второго аргумента.

    Полученный файл будет повреждать символы, отсутствующие в текущей кодовой странице. Он не будет правильно отображаться в системах, используемых в некоторых других странах.

    ИМО, это плохая идея, но я все еще упоминаю ее для полноты.

Другие вопросы по тегам