Linux、Windows 和 Mac 中的換行符對比

原文地址: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 和蘋果平臺上換行則分別是使用 0A0D 一個字節表示。

因爲 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。

相關文章
相關標籤/搜索