2015-12-21 4 views
0

Я начал онлайн-курс командной строки прошлой ночью. Я играл с некоторыми базовыми командами, и по какой-то причине каждый раз, когда я использую cat mydoc.txt или mydoc.docx, он выводит на терминал вопросительные знаки и другие случайные символы. Я искал этот сайт и Google и не могу найти точное решение этой конкретной проблемы. Я столкнулся с несколькими сайтами, которые, возможно, попробовали изменить разрешение на файл, но это, похоже, не повлияло на вывод.Проблемы с командами командной строки Unix

Любое понимание оценено!

+3

Разрешения управляют только если вы можете прочитать файл или нет, а не то, что вы читаете. Использование 'cat' в каком-то двоичном файле, таком как файл' docx' (независимо от того, что _really_), не имеет никакого смысла. Двоичные данные - это то, что вы можете читать как человек. В конце концов, это просто зависит от содержимого этого файла. Примечание: это означает, что контент в базовом, буквальном виде, а не в том виде, в каком он появляется в каком-либо приложении, который интерпретирует контент и показывает вам интерпретацию, то есть разницу _huge_. – arkascha

+0

Хорошо, спасибо за это! Затем, как я могу отобразить содержимое файла на терминале? Docx - это расширение моего документа Microsoft Word .. в курсе, который мы узнали, имя файла cat будет отображать текст документа – user3344239

+1

@ user3344239, 'cat' отобразит текст текстового документа. Однако он ничего не делает, чтобы извлечь текст из файла 'docx'. Чтобы получить легкий взгляд в любом файле, попробуйте выполнить команду 'hd' или' hexdump'.Это может показывать шестнадцатеричные значения для чего угодно, и наряду с этим выходом он может отображать найденные символы печати и точки для непечатаемых. – donjuedo

ответ

2

Файл .doc содержит двоичные [8-битные байты в диапазоне 0x00-0xFF] байтов, которые MS-слово знает, как обращаться. Он имеет множество внутренних подразделов, таблиц и т. Д.

Когда вы используете cat, это терминал, это просто поток двоичных байтов. Терминальная программа пытается интерпретировать это как текст. Он попытается использовать кодировку UTF8 для юникода, которая имеет специальную длину переменной [1-4 байта] UTF «символы», которые называются «кодовыми точками».

Не все 1-4 байтовые последовательности выдают действительные кодовые точки UTF8. Когда терминальная программа находит некодеповую последовательность, она выдает ?.

В противном случае программа терминала попытается вывести то, что, по ее мнению, является правильным символом. Это может быть германский гласный с umlaut над ним. Или, персонаж в китайском наборе символов.

Это то, что вы получаете, если в терминальной программе установлен определенный набор символов/шрифт. Если данный набор недоступен, программа терминала будет [снова] выводить a ?

Обратите внимание, что все это просто «лучшее усилие» программы терминала, чтобы «интерпретировать» как текст, что на самом деле, просто случайная двоичная последовательность. Это похоже на попытку интерпретировать cat /usr/bin/cat, который представляет собой двоичный файл, на котором на самом деле нет текста.

Если файл, который вы catявляется только простой текстовый файл [или utf8 закодированное], что вы сделали будет работу. Чтобы увидеть, используйте простой текстовый файл и сделайте (например) cat /etc/passwd. Или, echo abc > /tmp/foo, а затем cat /tmp/foo

Конечно, если ваша цель была просто открыть .doc под Linux/* BSD и т.д., там являются программы, которые понимают эти файлы. Примечание: libreoffice представляет собой полный набор программ с открытым исходным кодом, аналогичный MS office, и то, что вы хотите, это LibreOffice Writer. Если у вас установлен стандартный дистрибутив (например, ubuntu или fedora), он, вероятно, уже будет установлен.

+0

есть ли команда открыть документ Word? Я попытался сделать cp myFile.docx test.txt, чтобы скопировать его содержимое в текстовый документ, но он все еще не работал – user3344239