Gedit отображает текст, но кот рассказывает другую историю

Я пытаюсь сортировать словарь из Grady Ward's Moby и столкнулся с проблемой. Когда я открываю его в gedit, я получаю:

abaca×N abaciscus×N abacist×N aback×v abacli×p Abaco×N abactinal×A abaculus×N abacus×N abac×N Abadan×N Abaddon×N Abad×N abaft×vP Abagael×N Abagail×N 

и так далее.

Однако, cat mobyposi.i | less cat mobyposi.i | less рассказывает другую историю. Я получаю беспорядок символов, начинающихся с <D7> и заканчивая ^M на каждой строке, и это невозможно прочитать.

^M – это, безусловно, линия, и dos2unix не исправляет это. Что касается <D7> , я полностью потерян. Мне нужно убрать оба из них, чтобы сделать это понятным для человека, хотя я уверен, что машина сможет справиться с этим просто отлично. : /

Я запускаю Ubuntu 15.04.

Файл mobyposi.i использует mobyposi.i стиле старого стиля, то есть символы CR. Зачем? Я не знаю. Этот файл с 1993 года, возможно, автор хотел быть совместимым с Mac, и подумал, что пользователи Unix и Windows могут нападать сами по себе. Или, может быть, автор допустил ошибку, файл readme гласит, что «файл словаря [имеет] CRLF (ASCII 13/10) разделители», тогда как разделители на самом деле просто CR.

Слова и часть речи разделяются байтом D7₁₆ = 215₁₀ = 327₈. Символ × который показывает Gedit, является глифом, соответствующим этому байту в кодировке Latin-1.

Чтобы преобразовать окончания строк в конец строки Unix (LF) и разделитель слова / части, выполните следующие действия : запустите

 LC_CTYPE=C tr '\r\327' '\n:' <mobyposi.i >mobyposi.txt 

dos2unix ничего не сделал, поскольку на входе не было окончаний линии DOS. Gedit автоматически обнаружил файл в чужой кодировке (он обнаружил новые строки и обнаружил однобайтную кодировку и выбрал Latin-1 среди множества возможностей, потому что был настроен таким образом). Меньше не автоматически определяет внешние кодировки, он показал вам, как выглядит файл при интерпретации в вашем языке.