Windows & Unix 檔案格式之迷

來源:互聯網
上載者:User

 

(1)問題提出
我們可能會遇到過這樣一些困惑:
A, 如何查看一個檔案或資料流的二進位格式(以十六進位格式顯示)?
B,為什麼在 windows下編輯的 shell 指令碼在 Unix下不能執行?為什麼在 windows下編輯的 C 源檔案在有些 gcc 編譯器下不能編譯?
C,為什麼我在 vi 等編輯器下開啟一個文字檔會包含 ^M,如何把它去掉?為什麼我在 windows 上用記事本開啟 unix上的檔案,檔案都不換行?

(2)分析與方案

A,如何查看一個檔案的二進位格式(以十六進位格式顯示)?
方法一:在 UtraEdit 使用 Ctrl + H 切換到十六進位編輯模式。** 注意 ** :此方法一有缺陷,它會將行末的單個"分行符號"顯示成 "斷行符號" + "換行" 兩個字元。

方法二:使用檔案或流的二進位查看工具 fbin。

B,為什麼在 windows下編輯的 shell 指令碼在 Unix下不能執行?為什麼在 windows下編輯的 C 源檔案在有些 gcc 編譯器下不能編譯?

原因分析:unix 的 shell 指令碼不能識別 "斷行符號符" (即:CR,'\r'),Windows 檔案格式換行時,總是以 "斷行符號" + "換行" ,導致 unix 下的 shell 無法正常解釋。解決方案:就是把 windows 格式的中的 "斷行符號" 符刪除。

方法一:使用 vi 開啟源檔案,把 '\r\n' 替換成 '\n' ;** 缺點 ** :不適合大量檔案的批量作業。

方法二:使用 UtraEdit 把 Windows 格式的檔案轉換成 Unix 格式。檔案-->轉換-->Unix轉DOS;** 缺點 ** :不適合大量檔案的批量作業。

方法三:Unix 下的 dos2unix 命令,如 $ dos2unix -k xx.c;** 缺點 ** :此方法有一致命缺陷,它會改變原來的檔案屬性,如一個可執行 shell 指令碼的可執行屬性及其它屬性,轉換後都將會丟掉;** 優點 ** :適合大量普通檔案本檔案的批量作業。

方法四: win2unix (windows,unix 均可使用),功能類似 dos2unix,如 win2unx xx.c;** 優點** :克服了 dos2unix 的所有缺點,它能保留源檔案的任何屬性。還適合大量檔案的批量作業。

C,為什麼我在vi 等編器下開啟一個文字檔會包含^M,如何把它去掉? 為什麼我在windows上用記事本開啟unix上的檔案,檔案都不換行?

原因分析:要解決這個問題,必先弄清 unix 與 windows 文字檔的差異。如下:
1) 磁碟中 Windows 文字檔總是以 "斷行符號" + "換行"的形式進行換行的。
2) 磁碟中 Unix 格式的文字檔,總是以"分行符號"(即:LF,'\n') 換行,而非 "斷行符號分行符號"。(Unix 規定:unix 文字檔儲存到磁碟時,總是自動把 "斷行符號分行符號" 轉換成 "斷行符號符" 儲存,輸出到終端時由終端自動將將 "斷行符號符" 轉換成 "斷行符號分行符號" 輸出) 

** 結論 1 **:這樣在 windows 的記事本中開啟 Unix 格式的檔案時,因為檔案中沒有 '\r',所以無法正常顯示換行,結果就會把所有的內容顯示在同一行中。

** 結論 2 **:UtraEdit 等工具會自動檢測檔案中是否包含'\r',當檢查行末缺少'\r'時,一般它會提示要求進行Unix 到Windows 格式的轉換(相信都遇到這個提示資訊)。

** 結論 3 **:UtraEdit 和 vi 等工具,在儲存檔案時會自動依照檔案原來的格式進行儲存。即:如開啟的如是 windows 格式它會把檔案依然按 windows 格式儲存(不進行自動轉換);如開啟的如是unix 格式它會把檔案依然按 unix 格式儲存(不進行自動轉換)。

 

參考原文:http://down.51cto.com/data/33367

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.