Я пытаюсь сортировать словарь из 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 среди множества возможностей, потому что был настроен таким образом). Меньше не автоматически определяет внешние кодировки, он показал вам, как выглядит файл при интерпретации в вашем языке.