2015-12-21 56 views
0

昨晚我開始了一個命令行在線課程。我在玩一些基本命令,出於某種原因,每次使用cat mydoc.txt或mydoc.docx時,它只會向終端輸出問號和其他隨機符號。我搜索了這個網站和谷歌,並找不到這個具體問題的確切解決方案。我遇到了幾個網站,說可能會嘗試更改文件權限,但這似乎不會影響輸出。Unix貓命令問題

任何見識都被讚賞!

+3

權限僅用於控制是否可以讀取文件,而不是讀取文件。在一些像docx文件這樣的二進制文件上使用'cat'(無論_really_是什麼)沒有任何意義。二進制數據不是你可以作爲人閱讀的東西。最後,它只取決於該文件的內容。注意:這意味着以基本的字面方式處理內容,而不是像某些應用程序解釋內容並向您顯示解釋所顯示的那樣,這是一種_huge_差異。 – arkascha

+0

好的,謝謝!那我怎樣才能把文件的內容顯示到終端? Docx是我的Microsoft word文檔擴展..在我們學習過程中,cat filename將顯示文檔 – user3344239

+1

@ user3344239的文本,'cat'將顯示文本文檔的文本。儘管如此,它從「docx」文件中提取文本並不明智。爲了在任何文件中獲得更好的外觀,請嘗試使用'hd'或'hexdump'命令。它可以顯示任何東西的十六進制值,並且在該輸出旁邊,它可以顯示找到的可打印字符,以及未打印的點。 – donjuedo

回答

2

A .doc文件包含MS字知道如何處理的二進制[8位字節,範圍爲0x00-0xFF]個字節。它有許多內部小節,表格等。

當你將它連接到一個終端時,它只是一個二進制字節流。終端程序試圖將其解釋爲文本。它將嘗試使用unicode的UTF8編碼,該編碼具有稱爲「代碼點」的特殊變長度[1-4字節] UTF「字符」。

並非所有的1-4字節序列都會生成有效的UTF8碼點。當終端程序發現一個非碼點序列時,它輸出一個?

否則,終端程序會嘗試輸出它認爲是正確的字符。這可能是一個德語元音,其上帶有變音符號。或者,中文字符集中的一個字符。

如果終端程序加載了特定的字符集/字體集,就會出現這種情況。如果給定集合不可用,則終端程序將[再次]輸出?

注意,所有這些都是終端程序「盡力」作爲文本來「解釋」,實際上,只是一個隨機二進制序列。這與試圖解釋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