1. 程式人生 > >DOS、Mac 和 Unix 文件格式+ UltraEdit使用

DOS、Mac 和 Unix 文件格式+ UltraEdit使用

選項 就會 ultra app hex vip view .html unix環境

一、文本格式區別 用UltraEdit打開unix文本文件時總會提示:是否將文件轉換為dos格式。在windows編輯配置文件,然後用ftp上傳到linux主機,發現運行時讀取配置文件有錯。由於沒有經驗,分析了半天。 UltraEdit另存為有1.DOS終結符-CR/LF 2.UNIX終結符-LF 3.MAC終結符-CR 具體分析,在 utrledit下打開分別打開一個dos和unix的文本文件,然後選擇十六進制編輯,即可看到其編碼內容(可以批量替換來轉格式 bat文件)。unix下的回車是用0x0A表示的,而dos下的回車則是0x0D0A。 在windows下用utraledit編輯後,可以在文件菜單下找到轉換為unix格式,然後再上傳主機。但是這時還有問題,因為有的ftp工具可以選擇以文本或者二進制格式傳輸,這時則必須選擇二進制,否則傳輸時又會被改為dos格式。 unix文本文件和windows/dos文本文件的格式區別主要是兩點: 換行符: unix(/n) windows/dos(/r/n) Ctrl: ^J ^M^J Dec: 10 13+10 Hex: 0A 0D+0A Code: LF CR+LF 文件結束符: unix windows/dos Ctrl: ^D ^Z Dec: 04 26 Hex: 04 1A ASCII模式和Binary模式的區別是回車換行的處理,Binary模式不對數據進行任何處理,ASCII模式將回車換行轉換為本機的回車字符,比如:UNIX下是\n,Windows下是\r\n,Mac下是\r。 ASCII模式下會轉換文件,不能說是不同系統對回車換行解釋不同,而是不同的系統有不同的行結束符。UNIX系統下行結束符是一個字節,即十六進制的0A,而Windows的系統是兩個字節,即十六進制的0D0A,所以當你用ASCII方式從UNIX的FTP Server下載文件到Windows系統上時(不管是二進制或者文本文件),每檢測到一個字節是0A,就會自動插入一個0D,所以如果你的文件是二進制文件,比如可執行文件、壓縮包什麽的,就肯定不能用了。如果你的文件就是UNIX下的文本文件,你用ASCII模式是正確的,要是誤用了Binary模式,你在Windows上看這個文件是沒有換行的,裏面是一個個的黑方塊。 一般來說,我們最好都用Binary方式,這樣可以保證不出錯。如果有文本格式轉換的問題,即UNIX格式的文本和DOS格式的文本之間的轉換,有很多工具可以做的,不要在ftp傳輸的時候冒險,尤其是你如果對這些東西不是非常清楚的話。 在printf這樣的函數中, 如果你出現一個\n, 它卻代表了一個邏輯上的意義, 即它代表在本地系統上的那種回車換行, 所以它在UNIX上只是<LF>, 但如果你在DOS上用諸如Truboc編程的話它輸出的是<CR><LF>。

UltraEdit 每次打開新文件的時候,都提示:

文件可能不是DOS格式,

你要轉換 File 為 DOS 格式嗎?


高 級 -> 配置 -> 文件處理 -> DOS/UNIX/MAC 處理 -> UNIX/MAC 文件檢測/轉換 中,取消原先選擇的
檢測文件類型並提示進行更改,選取 禁用

DOS、Mac 和 Unix 文件格式 相信很多朋友都碰到過這三種文件格式的互換問題,今日又碰到這個問題,忽然想 尋根問底,於是整理了本文檔。 文件格式區別 我們先看看這三個家夥有啥區別。

很久以前,人們用老式的電傳打字機作為輸入設備,它使用 兩個字符來另起新行。一個字符把滑動架移回首位 (稱為回車,),另一個字符把紙上移一行 (稱為換行,)。 當計算機問世後,由於存儲器曾經非常昂貴。有些人就認定沒必要用兩個字符來表示行尾。於是 UNIX 開發者決定他們可以用 一個字符來表示行尾。

Apple 開發者規定了用 。 開發 MS-DOS (以及微軟視窗) 的那些家夥則決定沿用老式的 。三種行尾格式如下: unix dos mac 這意味著,如果你試圖把一個文件從一種系統移到另一種系統,那麽你就有換行符方面的麻煩。 轉換 有需求就會有動力。

在Windows平臺,有強大的UltraEdit,它支持DOS、Mac 和 Unix 三種文 件格式的任意互換。在【文件】->【轉換】選項卡下有相應的對應選項,很傻很強大。

下面我們看看在Unix/Linux平臺該如何做呢?

方法一:強大的dos2unix dos2unix filename

方法二:強大的腳本 sed ‘s/^M//‘ filename > tmp_filename 其中^M是同時Ctrl+V+M按出來的,表示回車。 或 tr -d "\r" filename 或 cat filename | perl -pe ‘~s/\r//g‘ > tmp_filename

方法三:強大的vim vim filename :set fileformat=unix :w 或 vim filename :%s/^M//g :w 與vi不同,vim具有自動識別功能,只需如下設置就可以自動進行轉換。不過由於Mac格式比較特殊,vim對mac格式的自動探測可能會出錯。請參考: http://vimcdoc.sourceforge.NET/doc/usr_23.html vim filename :set fileformats=unix,dos,mac 批量轉換 有時候我們可能希望對這種轉換進行批量處理。

在Windows下有強大的UltraEdit,用全局replace的方法或者建立工程的方法可以批量轉換,請參考 http://tech.ddvip.com/2007-10/119380983936863.html 。Windows平臺下還有很多相關的小工具,如MultiU2D等,google一下吧。 在Unix/linux平臺下我們就要借助腳本文件或者通道了,實質上是上述幾種方法的自動化。

下面舉幾個簡單例子,來源自 http://bbs.chinaunix.net/viewthread.PHP?tid=412957&extra=&page=1 :

腳本1: ls -l | awk ‘{print $8}‘ > filename.txt N=1 NN=`wc -l filename.txt | awk ‘{print $1}‘` while [ "$N" -le "$NN" ]; do TempLine=`sed -n "$N"p "filename.txt"` if [ -n "$TempLine" ]; then tmpfilename=$TempLine dos2ux $tmpfilename > file mv file $tmpfilename fi N=$(($N + 1)) done

腳本2: for XFILE in $(egrep -l ^M `find . -name "*.txt";find . -name "*.sql"`) do echo "開始處理文件"$XFILE if [ -s $XFILE ] then TMPFILE=$XFILE.tmp mv $XFILE $TMPFILE tr -d "\r" $XFILE rm $TMPFILE else continue fi done 通道法: find . -type f |xargs -i dos2unix {} 後記 對於Mac格式轉換到其他兩種格式的方法類似,在類Unix環境下有dos2unix/mac2unix工具。 在計算機世界,格式轉換無處不在,如字符格式、壓縮格式、網絡協議格式、音視頻格式等等。所以進行相關工作時,應該多多留意。

DOS、Mac 和 Unix 文件格式+ UltraEdit使用