Это не "формате ASCII", ни "в ASCII-русски".
до того, как Юникод получил широкое распространение, большинство компьютерных систем использовали кодировки символов ISO-8859, которых было 16, каждая для другого региона (Центральная Европа, кириллица, греческий...). У Windows были свои собственные "кодовые страницы", очень похожие, но с дополнительными глифами в неиспользуемых диапазонах. Все эти кодировки 8-битные и отличаются только во второй половине (128-255).
проблема с этими кодировки в том, что это почти невозможно для программы, чтобы определить , который для сохранения файла использовалась кодировка, если она не была указана явно (например, в HTML-страницах; однако в обычных текстовых файлах такие теги метаданных отсутствуют). Читайте статью Википедии на Mojibake для более детального описания.
в вашем примере документ был сохранен с помощью Windows-1251 (кириллица), но ваша программа читает его, как если бы это было Windows-1252 (западноевропейское), которое имеет очень различные характеры в таких же положениях. Для компьютера это выглядит совершенно нормально – он не понимает языков или скриптов. (Есть программы, которые делают статистический анализ для того, чтобы определить правильную кодировку, хотя некоторые веб-браузеры имеют такую функцию.)
есть несколько способов преобразовать такой текст в Юникод:
использовать онлайн-инструменты, такие как этот или этот.
используйте веб-браузер:
перетащите .txt
файл в браузере.
С Вид → Кодировка Символов (или Firefox → Веб-Разработчик → Кодировка Символов или Гаечный Ключ → Инструменты → Кодировка), выберите правильную исходную кодировку: "кириллица (Windows-1251)" в вашем случай.
использовать Notepad2 редактор текста:
открыть файл.
С Файл → Кодировка → Перекодировать..., выберите правильную исходную кодировку.
используйте GNU iconv
, с бинарниками Windows из GnuWin32 или Gettext для Win32.
iconv -f cp1251 -t utf-8 < myfile.txt > myfile.fixed.txt
Блокнот Windows будет правильно читать текст в кодировке UTF-8 и UTF-16.