[轉(zhuǎn)]不同操作系統(tǒng)對(duì)文本文件“行結(jié)束符”的不同定義
http://dev.firnow.com/course/3_program/c++/cppsl/20081117/151346.html
不同操作系統(tǒng)對(duì)文本文件“行結(jié)束符”的不同定義
\n是換行,英文是LineFeed,ASCII碼是0xA。
\r是回車,英文是Carriage Return ,ASCII碼是0xD。
如果用過(guò)機(jī)械打字機(jī),就知道回車和換行的區(qū)別了。。。
換行就是把滾筒卷一格,不改變水平位置。
回車就是把水平位置復(fù)位,不卷動(dòng)滾筒。
但是我們平時(shí)按得Enter到底是回車還是換行,不太清楚??
看到一種說(shuō)法:windows下enter是 \n\r,unix下是\n,mac下是\r
在MS的系統(tǒng)中純文本格式按一個(gè)回車鍵是輸入了兩個(gè)字符,一個(gè)回車一個(gè)換行。在LINUX系統(tǒng)中則只是一個(gè)回車。
Unix系統(tǒng)里,每行結(jié)尾只有“<換行>”,即“\n”;Windows系統(tǒng)里面,每行結(jié)尾是“<換行><回
車>”,即“\n\r”;Mac系統(tǒng)里,每行結(jié)尾是“<回車>”。一個(gè)直接后果是,Unix/Mac系統(tǒng)下的文件在
Windows里打
開(kāi)的話,所有文字會(huì)變成一行;而Windows里的文件在Unix/Mac下打開(kāi)的話,在每行的結(jié)尾可能會(huì)多出一個(gè)^M符號(hào)。Linux和其它Unix類操作系統(tǒng)使用單個(gè)字符作為行結(jié)束符,這個(gè)字符通常被稱作“換行符”(LF)或“新行”(NL)。
Dos,Windows和OS2使用兩個(gè)字符作為行結(jié)束符,一個(gè)“回車”(CR)和一個(gè)LF。
Mac OS只使用一個(gè)CR。
有些Linux配置文件對(duì)行結(jié)束符規(guī)范很敏感,所以盡量不要試圖從Dos,windows或Mac OS系統(tǒng)中編輯Linux系統(tǒng)的配置文件。
---------分割線---------
還有一篇也是講這個(gè)問(wèn)題,作者還給出了一個(gè)解決方法:
[轉(zhuǎn)]關(guān)于文本文件的格式------回車換行符(CR/LF)
http://www.felix021.com/blog/read.php?774
Unix和Windows間的文字檔轉(zhuǎn)換
http://www.siuying.net/articles/2005/11/18/524/
在用電報(bào)通訊的年代,人們發(fā)明了一種用7bits把常用的英文和標(biāo)點(diǎn)編碼的方法 — 這就是至今還在電腦世界應(yīng)用的ASCII。
電 報(bào)機(jī)每當(dāng)打印到一行結(jié)尾時(shí)便需要「跳進(jìn)下一行」並「回到第一格」,因此ASCII有LF(Line Feed, 0×0A) 和CR(Carriage Return, 0×0D)。在電腦的世其實(shí)並不需要用兩個(gè)字符代表「下一行」的意思,為了省資源,在設(shè)計(jì)OS時(shí)一些人就決定用其中一個(gè)字符代表「下一行」1,因?yàn)榇蠹疫x擇不同,做成了不同系統(tǒng)的「下一行」符號(hào)不同的問(wèn)題。
這 問(wèn)題常見(jiàn)於在 Windows 上傳一些檔案到 Unix Server 中,如果不經(jīng)轉(zhuǎn)換 Unix 會(huì)見(jiàn)到一些古怪符號(hào) (顯示成^M的CR字符)。如果己經(jīng)有一堆Windows的文字檔,怎樣把它們轉(zhuǎn)換成Unix的文字檔?不用自己寫轉(zhuǎn)換軟件,你可以使用Unix command tr (translate) 或 sed (Stream Editor):
# USE tr TO REMOVE CR CHARACTER
tr -d '\r' < oldfile > newfile
# USE sed, IN UNIX ENVIRONMENT: convert DOS newlines (CR/LF) to Unix format
sed 's/.$//' # assumes that all lines end with CR/LF
sed 's/^M$//' # in bash/tcsh, press Ctrl-V then Ctrl-M
# USE sed, IN UNIX ENVIRONMENT: convert Unix newlines (LF) to DOS format
sed "s/$/`echo -e \\\r`/" # command line under ksh
sed 's/$'"/`echo \\\r`/" # command line under bash
---------
不同操作系統(tǒng)對(duì)文本文件“行結(jié)束符”的不同定義
\n是換行,英文是LineFeed,ASCII碼是0xA。
\r是回車,英文是Carriage Return ,ASCII碼是0xD。
如果用過(guò)機(jī)械打字機(jī),就知道回車和換行的區(qū)別了。。。
換行就是把滾筒卷一格,不改變水平位置。
回車就是把水平位置復(fù)位,不卷動(dòng)滾筒。
但是我們平時(shí)按得Enter到底是回車還是換行,不太清楚??
看到一種說(shuō)法:windows下enter是 \n\r,unix下是\n,mac下是\r
在MS的系統(tǒng)中純文本格式按一個(gè)回車鍵是輸入了兩個(gè)字符,一個(gè)回車一個(gè)換行。在LINUX系統(tǒng)中則只是一個(gè)回車。
Unix系統(tǒng)里,每行結(jié)尾只有“<換行>”,即“\n”;Windows系統(tǒng)里面,每行結(jié)尾是“<換行><回
車>”,即“\n\r”;Mac系統(tǒng)里,每行結(jié)尾是“<回車>”。一個(gè)直接后果是,Unix/Mac系統(tǒng)下的文件在
Windows里打
開(kāi)的話,所有文字會(huì)變成一行;而Windows里的文件在Unix/Mac下打開(kāi)的話,在每行的結(jié)尾可能會(huì)多出一個(gè)^M符號(hào)。Linux和其它Unix類操作系統(tǒng)使用單個(gè)字符作為行結(jié)束符,這個(gè)字符通常被稱作“換行符”(LF)或“新行”(NL)。
Dos,Windows和OS2使用兩個(gè)字符作為行結(jié)束符,一個(gè)“回車”(CR)和一個(gè)LF。
Mac OS只使用一個(gè)CR。
有些Linux配置文件對(duì)行結(jié)束符規(guī)范很敏感,所以盡量不要試圖從Dos,windows或Mac OS系統(tǒng)中編輯Linux系統(tǒng)的配置文件。
---------分割線---------
還有一篇也是講這個(gè)問(wèn)題,作者還給出了一個(gè)解決方法:
[轉(zhuǎn)]關(guān)于文本文件的格式------回車換行符(CR/LF)
http://www.felix021.com/blog/read.php?774
Unix和Windows間的文字檔轉(zhuǎn)換
http://www.siuying.net/articles/2005/11/18/524/
在用電報(bào)通訊的年代,人們發(fā)明了一種用7bits把常用的英文和標(biāo)點(diǎn)編碼的方法 — 這就是至今還在電腦世界應(yīng)用的ASCII。
電 報(bào)機(jī)每當(dāng)打印到一行結(jié)尾時(shí)便需要「跳進(jìn)下一行」並「回到第一格」,因此ASCII有LF(Line Feed, 0×0A) 和CR(Carriage Return, 0×0D)。在電腦的世其實(shí)並不需要用兩個(gè)字符代表「下一行」的意思,為了省資源,在設(shè)計(jì)OS時(shí)一些人就決定用其中一個(gè)字符代表「下一行」1,因?yàn)榇蠹疫x擇不同,做成了不同系統(tǒng)的「下一行」符號(hào)不同的問(wèn)題。
這 問(wèn)題常見(jiàn)於在 Windows 上傳一些檔案到 Unix Server 中,如果不經(jīng)轉(zhuǎn)換 Unix 會(huì)見(jiàn)到一些古怪符號(hào) (顯示成^M的CR字符)。如果己經(jīng)有一堆Windows的文字檔,怎樣把它們轉(zhuǎn)換成Unix的文字檔?不用自己寫轉(zhuǎn)換軟件,你可以使用Unix command tr (translate) 或 sed (Stream Editor):
# USE tr TO REMOVE CR CHARACTER
tr -d '\r' < oldfile > newfile
# USE sed, IN UNIX ENVIRONMENT: convert DOS newlines (CR/LF) to Unix format
sed 's/.$//' # assumes that all lines end with CR/LF
sed 's/^M$//' # in bash/tcsh, press Ctrl-V then Ctrl-M
# USE sed, IN UNIX ENVIRONMENT: convert Unix newlines (LF) to DOS format
sed "s/$/`echo -e \\\r`/" # command line under ksh
sed 's/$'"/`echo \\\r`/" # command line under bash
---------
posted on 2010-12-26 11:50 yanvenhom 閱讀(1076) 評(píng)論(0) 編輯 收藏 引用 所屬分類: UNIX

