Подтвердить что ты не робот

Преобразование текстового файла из ANSI в ASCII с использованием С#

У меня есть ANSI-кодированный файл, и я хочу преобразовать строки, которые я прочитал из файла, в ASCII.

Как мне сделать это на С#?


EDIT: Что делать, если я использовал "BinaryReader" BinaryReader reader = new BinaryReader(input, Encoding.Default); но этот читатель берет (Stream, Encoding) но "Стрим" - это реферат! И где я должен поместить путь к файлу, который он будет читать?

4b9b3361

Ответ 1

Прямое преобразование из ANSI в ASCII может быть не всегда возможным, поскольку ANSI является надмножеством ASCII.

Вы можете попробовать конвертировать в UTF-8 с помощью Encoding, хотя:

Encoding ANSI = Encoding.GetEncoding(1252);

byte[] ansiBytes = ANSI.GetBytes(str);
byte[] utf8Bytes = Encoding.Convert(ANSI, Encoding.UTF8, ansiBytes);

String utf8String = Encoding.UTF8.GetString(utf8Bytes);

Конечно, вы можете заменить UTF8 на ASCII, но это не имеет смысла, поскольку:

  • если исходная строка не содержит байтa > 126, то она уже ASCII
  • Если исходная строка содержит один или несколько байтов > 126, то эти байты будут потеряны

UPDATE:

В ответ на обновленный вопрос вы можете использовать BinaryReader следующим образом:

BinaryReader reader = new BinaryReader(File.Open("foo.txt", FileMode.Open),
                                       Encoding.GetEncoding(1252));

Ответ 2

В основном вам нужно указать Encoding при чтении/записи файла. Например:

// read with the **local** system default ANSI page
string text = File.ReadAllText(path, Encoding.Default); 

// ** I'm not sure you need to do this next bit - it sounds like
//  you just want to read it? **

// write as ASCII (if you want to do this)
File.WriteAllText(path2, text, Encoding.ASCII);

Обратите внимание, что после того, как вы его прочитали, text на самом деле является unicode в памяти.

Вы можете выбрать разные кодовые страницы, используя Encoding.GetEncoding.