最近在php還有c#以及memcache的shell當中經常看到\r\n的寫法,剛開始還沒注意,
不過後面感覺這樣寫有些不對頭,\r表示回車 \n表示換行,那這樣不是換行了兩次嗎?
為了解決疑惑,問了下度娘,總算對\r \n有了新的認識。
首先 \r 是回車, \n 是換行,這毋庸置疑,但是前者的作用只是將游標移到行首,後者是將游標移到下一行。
也就是說 你敲鍵盤的 回車鍵其實是回車和換行的組合鍵(\r\n)。不同的作業系統,其原理也不一樣
如果把乙個文字的空格和回車等都反轉義,就是顯示出轉義符,那麼你會看到
windows每行結尾都有\r\n這個三個作業系統是故意的吧,這麼不統一,這也是為啥 linux 檔案拿到 windows 下會錯行的原因。unix每行結尾只有\n
mac每行結尾只有\r
下面做個小實驗來看看這個錯行現象
1.在 linux 下vim a.txt 編輯乙個文字
2.把這個文字弄到windows下面看看
可以發現錯行了!!!因為對於windows上面的換行條件還少了個字元\r
那麼windows下看起來正常的檔案在linux下面又會變成啥樣?
3.在windows下編輯乙個文字
通過ftp傳到linux下後,開啟
簡直慘不忍睹,h和o都合併再一起了,^m又是啥玩意,不著急後面會講到
可見得我們在平時使用電腦時,已經習慣了回車和換行一次搞定,敲乙個回車鍵,即是回車,又是換行。
\n 軟回車在windows 中表示換行且回到下一行的最開始位置。
在linux、unix 中只表示換行,但不會回到下一行的開始位置。
\r 軟空格下面是回車和換行的歷史,有興趣的人可以閱讀下在linux、unix 中表示返回到當行的最開始位置。
在mac os 中表示換行且返回到下一行的最開始位置。
回車(carriage return)和換行(line feed)兩個概念的來歷和區別
計算機還沒出生之前,有一種玩意叫電傳打字機,每分鐘可以打10個字元。但是他有個問題,
就是打完一行換行的時候要用去0.2秒,大約是打兩個字元的時間。
而就在他使用這0.2秒進行換行的時候又有新的字元傳過來,那麼這個字元將會丟失。
於是,研製人員想了個辦法解決這個問題,就是在每行後面加兩個字元表示結束的字元。
乙個叫做回車,它用來告訴打字機把列印頭定位於在左邊界,另個叫換行,它用來告訴打字機
把紙往上挪一下。這樣打字機在換行時使用的0.2秒時間丟棄的只是兩個不需要顯示出來的字元。
計算機誕生後,這兩個字元也搬了過來,那時候儲存器很貴,一些科學家覺得每次換行都要花費空間來放下這兩
個字元太浪費了,加乙個就可以了,於是出現了分歧。unix系統每行結尾只有\n,windows系統每行結尾是\r
\n,mac系統每行結尾是\r。乙個直接的結果就是如我上面的實驗那樣,同一文字在不同系統下會出現不同的結
果,這當然不是我們想要的效果
dos 和 windows 採用回車+換行 cr/lf 表示下一行即 ^m$
unix 和 linux 採用換行 lf 表示下一行即 $
mac 採用cr表示下一行 即^m
cr 用\r表示 十進位制ascii為13 十六進製制0x0d
lf 用\n表示 ascii為10 十六進製制0x0a
看!有圖有真相,我可沒瞎說哈。
需要注意的是,不同平台之間用ftp協議傳輸檔案時,在ascii模式下傳輸可能會自動對換行進行轉換,從而導致位元組數的變更
如果不想ftp對檔案的修改,可以使用bin模式進行文字傳輸。那麼如何解決不同平台的文字錯行顯示呢?
1.windows 文字到 linux 下的轉換方法.
(1)使用sed 命令進行替換
sed -e '注意這個^m是先按ctrl+v 然後按ctrl+shift+m 才能打出來的不是直接打^ms/^m//g
' old.txt > new.txt
(2)vim編輯器的替換命令
同樣^m不是直接打出來的,會變成藍色,而不是白色
(3)使用命令列
tr -d "\r"(4)使用dos2unix工具unixfile
dos2unix a.txt #直接轉換(5)ftp傳輸工具dos2unix -n a.txt b.txt #保留原始檔
如果是以ascii模式傳輸,那麼ftp會幫你轉換
如果是以binary模式傳輸,那麼ftp保留原檔案
如果有些細節上的問題不重視,那麼可能就會帶來頭疼的問題,或者不必要的麻煩。
回車與換行的故事
在計算機還沒有出現之前,有一種叫做電傳打字機 teletype model 33 的玩意,每秒鐘可以打10個字元。但是它有乙個問題,就是打完一行換行的時候,要用去0.2秒,正好可以打兩個字元。要是在這0.2秒裡面,又有新的字元傳過來,那麼這個字元將丟失。於是,研製人員想了個辦法解決這個問題,就是在每...
回車與換行的故事
以前在學彙編的時候,一直不知道老師在換行時,總會打乙個換行符和回車符,原來他們還有這麼乙個故事.在很久以前,有一種叫做電傳打字機 teletype model 33 asr 的機器,那時候還沒有計算機這種玩意。在這種打字機上,有乙個叫carriage的部件,它是打字頭,相當於打字機的游標。每輸入乙個...
回車和換行
在計算機還沒有出現之前,有一種叫做電傳打字機 teletype model 33 的玩意,每秒鐘可以打10個字元。但是它有乙個問題,就是打完一行換行的時候,要用去0.2秒,正好可以打兩個字元。要是在這0.2秒裡面,又有新的字元傳過來,那麼這個字元將丟失。於是,研製人員想了個辦法解決這個問題,就是在每...