原文地址:Linux、Windows 和 Mac 中的換行符對比html
博客地址:http://www.moonxy.comlinux
1、前言windows
常常使用 Window、Linux 等不一樣操做系統的開發者,在處理文本的時候,基本都會遇到不一樣系統,出現換行格式不一致的問題,緣由就出在不一樣的系統,定義了不一樣的換行符。服務器
2、Linux、Windows 和 Mac 中的換行符對比wordpress
對於換行這個動做,Unix下通常只有一個 0x0A 表示換行("\n"),Windows 下通常都是 0x0D 和 0x0A 兩個字符,即 0D0A("\r\n"),蘋果機(MAC OS系統)則採用回車符 CR 表示下一行("\r")。spa
Unix 系統中:每行結尾只有 "<換行>",即 "\n";操作系統
Windows 系統中:每行結尾是 "<回車><換行>",即 "\r\n";code
Mac 系統中:每行結尾是 "<回車>",即 "\r"。orm
不一樣系統所定義的換行格式不一樣,致使的直接後果是,Unix/Mac 系統下的文件在 Windows 裏打開的話,全部文字會變成一行;而 Windows 裏的文件在 Unix/Linux 下打開的話,在每行的結尾會多車一個 ^M 字符。htm
Dos 和 windows 採用 "回車+換行",即 "CR + LF" 表示下一行,即敲一下回車鍵,至關於同時執行了 "回車+換行",即 ^M$($ 不是換行符的表示,換行符沒有表示出來,$ 是文本結束 EOF 的表示)。
而 UNIX/Linux 採用 "換行符",即 "LF" 表示下一行,即 "\n";
蘋果機(MAC OS系統)則採用 "回車符",即 "CR" 表示下一行,即 "\r";
CR 用符號 "\r" 表示,十進制 ASCII 代碼是 13,十六進制代碼爲 0x0D;
LF 使用 "\n"符號表示,ASCII代碼是 10,十六製爲 0x0A。因此 Windows 平臺上換行在文本文件中是使用 "0D0A" 兩個字節表示,而 UNIX/Linux 和蘋果平臺上換行則分別是使用 0A 和 0D 一個字節表示。
因爲 DOS 風格的換行使用 "\r\n",若是把這樣的文件上傳到 Unix/Linux,有些版本的 vi 不能識別 "\r",因此 vi 顯示時在行尾會出現 ^M 出來,可是有些就能識別 \r\n,正常顯示回車換行。
附部分 ASCII 碼對照表:
3、使用 Notepad++ 查看回車和換行符並相互轉換
Notepad++ 中能夠設置 Windows、Unix 和 Mac三種行尾換行符格式及其之間的轉換,以下:
默認不顯示回車及換行符:
1)設置 Notepad++ 顯示換行符,這樣才能看到效果, 視圖 -> 顯示符號 -> 顯示行尾符,若是是英文版的 Notepad++,則應該是 View -> Show Symbol -> Show End of Line;
2)設置行尾符格式:編輯 -> 檔案格式轉換 ->(可選 Windows、Unix 和 Mac中的一種),若是是英文版的 Notepad++,則應該是 Edit -> EOL Conversion -> Windows Format、Unix/OSX Format、Old Mac Format。
4、Linux 中去除 DOS/Windows 文檔中出現的 "^$"
有時候將 Windows 中編輯好的文本上傳到 LInux 服務器中使用,此時就須要將 Windows 中的 "^$" 去除,以下:
[root@ryan linux]# ll win1.txt -rw-r--r-- 1 root root 21 Apr 20 22:09 win1.txt [root@ryan linux]# cat win1.txt aaa bbbb cccc 123
使用 cat -A 選項查看文本全部的字符,以下:
[root@ryan linux]# cat -A win1.txt
aaa bbbb^M$
cccc^M$
123^M$
或者使用 cat -v 選項顯示出非打印字符,以下:
[root@ryan linux]# cat -v win1.txt aaa bbbb^M cccc^M 123^M
去除 "^M" 符號,以下:
[root@ryan linux]# cat -v win1.txt | tr -d '^M' > linux1.txt [root@ryan linux]# cat -A linux1.txt aaa bbbb$ cccc$ 123$
或者使用其 ASCII 碼,以下:
[root@ryan linux]# cat win1.txt |tr -d '\015' > linux2.txt [root@ryan linux]# cat -A linux2.txt aaa bbbb$ cccc$ 123$
須要注意:八進制下,^m 是 015;^Z 是 032;tab 是 011;^是136。
此處複習一下進制的相關知識,以下:
在C語言裏,整數有三種表示形式:十進制,八進制,十六進制。
其中以數字0開頭,由 0~7 組成的數是八進制。以 0X 或 0x 開頭,由 0~9,A~F 或 a~f 組成是十六進制。除表示正負的符號外,以 1~9 開頭,由 0~9 組成是十進制。
1)十進制:除表示正負的符號外,以 1~9 開頭,由0~9組成。如:128,+234,-278。
2)八進制:以 0 開頭,由 0~7組成的數。如:0126,050000。
3)十六進制:以 0X 或 0x 開頭,由 0~9,A~F 或 a~f 組成。如:0x12A,0x5a000。