前段時(shí)間學(xué)習Java套接字,寫(xiě)一個(gè)SMTP 發(fā)郵件的客戶(hù)端,無(wú)賴(lài)百般在windows下可以發(fā)送,在linux下怎么都發(fā)不出去,最后在發(fā)現windows和linux在處理?yè)Q行和回車(chē)不太一樣。。。。 下 在文本處理中, CR, LF, CR/LF是不同操作系統上使用的換行符.
Dos和windows采用回車(chē)+換行CR/LF表示下一行,
而UNIX/Linux采用換行符LF表示下一行,
蘋(píng)果機(MAC OS系統)則采用回車(chē)符CR表示下一行.
CR用符號'\r'表示, 十進(jìn)制ASCII代碼是13, 十六進(jìn)制代碼為0x0D;
LF使用'\n'符號表示, ASCII代碼是10, 十六制為0x0A. 所以Windows平臺上換行在文本文件中是使用 0d 0a 兩個(gè)字節表示, 而UNIX和蘋(píng)果平臺上換行則是使用0a或0d一個(gè)字節表示.
一般操作系統上的運行庫會(huì )自動(dòng)決定文本文件的換行格式. 如一個(gè)程序在windows上運行就生成CR/LF換行格式的文本文件,而在Linux上運行就生成LF格式換行的文本文件. 在一個(gè)平臺上使用另一種換行符的文件文件可能會(huì )帶來(lái)意想不到的問(wèn)題, 特別是在編輯程序代碼時(shí). 有時(shí)候代碼在編輯器中顯示正常, 但在編輯時(shí)卻會(huì )因為換行符問(wèn)題而出錯. 很多文本/代碼編輯器帶有換行符轉換功能, 使用這個(gè)功能可以將文本文件中的換行符在不同格式單互換.
在不同平臺間使用FTP軟件傳送文件時(shí), 在ascii文本模式傳輸模式下, 一些FTP客戶(hù)端程序會(huì )自動(dòng)對換行格式進(jìn)行轉換. 經(jīng)過(guò)這種傳輸的文件字節數可能會(huì )發(fā)生變化. 如果你不想ftp修改原文件, 可以使用bin模式(二進(jìn)制模式)傳輸文本.
先轉一段關(guān)于回車(chē)和換行的歷史。
Windows系統里面,每行結尾是“<換行><回車(chē)>”,即“\n\r”————此處有誤,恰好將順序顛倒了,從下面可以例子看出來(lái)。
下面在Linux中看看實(shí)際操作的效果。
先生成一個(gè)換行(\n, 0x0A)和回車(chē)(\r, 0x0D)組合的文本
$ echo -en '12\n34\r56\n\r78\r\n' > tmp
以十六進(jìn)制方式查看文本
$ od -t x1 tmp
0000000 31 32 0a 33 34 0d 35 36 0a 0d 37 38 0d 0a
0000016
在Linux的vim中的顯示效果
在windows的記事本中的顯示效果
可見(jiàn)Linux中遇到換行符會(huì )進(jìn)行回車(chē)+換行的操作,回車(chē)符反而只會(huì )作為控制字符顯示,不發(fā)生回車(chē)的操作。而windows中要回車(chē)符+換行符才會(huì )回車(chē)+換行,缺少一個(gè)控制符或者順序不對都不能正確的另起一行。