windows处理回车和Linux,linux与windows回车换行符的区别
“回車”(carriage return)VS ?“換行”(line feed)
在計算機還沒有出現之前,有一種叫做電傳打字機(Teletype Model 33)的玩意,每秒鐘可以打10個字符。但是它有一個問題,就是打完一行換行的時候,要用去0.2秒,正好可以打兩個字符。要是在這0.2秒里面,又有新的字符傳過來,那么這個字符將丟失。
于是,研制人員想了個辦法解決這個問題,就是在每行后面加兩個表示結束的字符。一個叫做“回車”,告訴打字機把打印頭定位在左邊界;另一個叫做“換行”,告訴打字機把紙向下移一行。
這就是“換行”和“回車”的來歷,從它們的英語名字上也可以看出一二。
后來,計算機發明了,這兩個概念也就被般到了計算機上。那時,存儲器很貴,一些科學家認為在每行結尾加兩個字符太浪費了,加一個就可以。于是,就出現了分歧。
Unix系統里,每行結尾只有“”,即“\n”;Windows系統里面,每行結尾是“”,即“\n\r”;Mac系統里,每行結尾是“”。一個直接后果是,Unix/Mac系統下的文件在Windows里打開的話,所有文字會變成一行;而Windows里的文件在Unix/Mac下打開的話,在每行的結尾可能會多出一個^M符號。
c語言編程時(windows系統)
\r 就是return 回到 本行 行首 這就會把這一行以前的輸出 覆蓋掉
如:
int main() {
cout << "hahaha" << "\r" << "xixi" ;
}
最后只顯示 xixi 而 hahaha 背覆蓋了
\n 是回車+換行 把光標 先移到 行首 然后換到下一行 也就是 下一行的行首拉
int main() {
cout << "hahaha" << "\n" << "xixi" ;
}
所謂回車、換行這些控制符,都是從以前的電傳打字機的控制命令繼承下來的。回車就是打印頭復位,換行就是走紙。Dos/Windows和Unix/Linux對回車、換行的理解差別就在于Dos/Windows認為0d=0d0a=0a,而Unix/Linux堅持沿用電傳打字機的工作方式(這個其實是比較正確的)。
所以在回車換行在Linux中是"0d",在Windows中是"0d0a".我們可以通過下面的程序測試一下:
上面的紅色字體估計是原作者筆誤,linux的換行符是\n,Ascii碼是0a,而不是0d。至于要測試的話,可以使用od -t x1 文件名去查看。
而\r在linux下的vi看到的是藍色的^M,是使用ctrl+m+v輸出的,可以在命令模式中使用
:%s/^M//g刪除,或者使用dos2unix去掉。
#define MAX_LENGTH 15536
#include
#include
using namespace std;
string delEnter(const string src) // 過濾掉串中的回車換行符
{
string des;
for(int i = 0; i < src.length(); i++)
{
char tempChar = src[i];
if( tempChar!=10 && tempChar!=13)
des.append(1,tempChar);
}
return des;
}
int main()
{
char html[MAX_LENGTH] = "";
FILE *fp = fopen("Linux.txt", "rb"); //FILE *fp = fopen("Windows.txt", "rb");
char buf[16384];
while (fgets(buf, 16384, fp))
strcat(html, buf);
strcat(html,"\0");
string s(html);
cout << "string is: " << s << endl;;
cout << "The size of string is: " << s.length() << endl;
cout << "after del string is: " << delEnter(s) << endl;
cout << "The size of string is: " << delEnter(s).length() << endl;
fclose(fp);
return 0;
}
程序中文件Linux.txt是從Linux系統中copy過來的。
我們可以通過這個程序觀察到,通過過濾掉回車換行符,Linux文件中的字符數的減少等于其行數,而
Windows中等于其行數的兩倍。但有一個問題要注意,程序中行:
FILE *fp = fopen("Linux.txt", "rb");
不能寫成:
FILE *fp = fopen("Linux.txt", "r");
后者默認的文件打開方式是文本方式,這時系統自動對文本進行了轉換,就不能得到上述的結論。
不過大家可以在Windows下用工具HexWorkShop,在Linux下用命令hexdump直接觀察具體的二進制代碼,更為直接。
關于回車和換行的歷史。
回車和換行關于“回車”(carriage return)和“換行”(line feed)這兩個概念的來歷和區別。
在計算機還沒有出現之前,有一種叫做電傳打字機(Teletype Model 33)的玩意,每秒鐘可以打10個字符。但是它有一個問題,就是打完一行換行的時候,要用去0.2秒,正好可以打兩個字符。要是在這0.2秒里面,又有新的字符傳過來,那么這個字符將丟失。
于是,研制人員想了個辦法解決這個問題,就是在每行后面加兩個表示結束的字符。一個叫做“回車”,告訴打字機把打印頭定位在左邊界;另一個叫做“換行”,告訴打字機把紙向下移一行。
這就是“換行”和“回車”的來歷,從它們的英語名字上也可以看出一二。
后來,計算機發明了,這兩個概念也就被般到了計算機上。那時,存儲器很貴,一些科學家認為在每行結尾加兩個字符太浪費了,加一個就可以。于是,就出現了分歧。
Unix系統里,每行結尾只有“”,即“\n”;Windows系統里面,每行結尾是“”,即“\n\r”;Mac系統里,每行結尾是“”。一個直接后果是,Unix/Mac系統下的文件在Windows里打 開的話,所有文字會變成一行;而Windows里的文件在Unix/Mac下打開的話,在每行的結尾可能會多出一個^M符號。
Dos和windows采用回車+換行CR/LF表示下一行,
而UNIX/Linux采用換行符LF表示下一行,
蘋果機(MAC OS系統)則采用回車符CR表示下一行.
CR用符號'\r'表示, 十進制ASCII代碼是13, 十六進制代碼為0x0D;
LF使用'\n'符號表示, ASCII代碼是10, 十六制為0x0A. 所以Windows平臺上換行在文本文件中是使用 0d 0a 兩個字節表示, 而UNIX和蘋果平臺上換行則是使用0a或0d一個字節表示.
一般操作系統上的運行庫會自動決定文本文件的換行格式. 如一個程序在windows上運行就生成CR/LF換行格式的文本文件,而在Linux上運行就生成LF格式換行的文本文件. 在一個平臺上使用另一種換行符的文件文件可能會帶來意想不到的問題, 特別是在編輯程序代碼時. 有時候代碼在編輯器中顯示正常, 但在編輯時卻會因為換行符問題而出錯. 很多文本/代碼編輯器帶有換行符轉換功能, 使用這個功能可以將文本文件中的換行符在不同格式單互換.
在不同平臺間使用FTP軟件傳送文件時, 在ascii文本模式傳輸模式下, 一些FTP客戶端程序會自動對換行格式進行轉換. 經過這種傳輸的文件字節數可能會發生變化. 如果你不想ftp修改原文件, 可以使用bin模式(二進制模式)傳輸文本.
Linux和Windows的換行符
一直對換行符這個東西概念比較模糊,直到最近花了一點時間仔細研究了一下,才徹底搞清楚這個問題,本文前面介紹部分是外文轉載,后面例子是個人總結,希望能對大家有一些幫助. 回車符號和換行符號產生背景 關于“ ...
Linux文件和windows文件在 換行符的區別
Linux或Unix文件,和windows文件,在來回處理時,如果不注意 換行符的區別,可能導致程序錯誤!!!深刻的教訓.... 在早期的打印機時代,開始新的一行要占用兩個字符的時間.如果到了一行的結 ...
git在不同平臺windows、linux、mac 上換行符的問題
0.01 不同平臺上換行符的問題 1,不同平臺對換行符的制定不同 windows (carriage return AND line feed) “\n\r” CRLF Un ...
windows python文件拷貝到linux上執行問題-換行符問題/r/n
之前在Windows下寫好了一個Python腳本,運行沒問題,今天在Linux下,腳本開頭的注釋行已經指明了解釋器的路徑,也用chmod給了執行權限,但就是不能直接運行腳本. 1 問題1: 報錯:: ...
windows下sed回車換行符處理
windows下sed回車換行符處理如果用sed for windows對整個文件進行了編輯,編輯之后一般需要處理回車換行符:rem windows的回車換行符是\r\n,linux的是\n,所以要替 ...
Linux- 關于windows和Linux和Mac的換行符
windows 的換行符為"\r\n" Linux的換行符為"\n" Mac的換行符為"\n\r",和Windows相反
linux和Dos下換行符轉換
一.windows的文件到linux下的轉換方法: 1. 用sed命令替換 sed -e 's/^M//g' original.txt > target.txt (注意^M 在Linux/Uni ...
菜鳥教程之工具使用(八)——EGit禁止自動轉換回車換行符
眾所周知,Windows和Linux系統的回車換行是不一樣的.想要進一步了解它們的可以閱讀下面的介紹,不感興趣的可以直接跳過. 產生背景 關于“回車”(carriage return)和“換行”(li ...
【aardio】回車換行符
回車換行符 在計算機還沒有出現之前,有一種叫做電傳打字機(Teletype Model 33)的玩意,每秒鐘可以打10個字符.但是它有一個問題,就是打完一行換行的時候,要用去0.2秒,正好可以打兩個字 ...
隨機推薦
iOS 版本號大小比較
NSString *num1 = @"5.2.0";??? NSString *num2 = @"5.3.0"; if ([num1 compare:num2 ...
Linux sudo
200 ? "200px" : this.width)!important;} --> 介紹 本篇文章主要介紹sudo配置和用法,為了給某個用戶控制權限比如執行某個命令或者關 ...
codeforces A. Vasily the Bear and Triangle 解題報告
題目鏈接:http://codeforces.com/problemset/problem/336/A 好簡單的一條數學題,是8月9日的.比賽中沒有做出來,今天看,從pupil變成Newbie了,那個 ...
【Java基礎】構造方法調用構造方法
從一個程序開始: class dog { private String name; private String color; private int age; dog(String name) // ...
基于MySQL + Node.js + Leaflet的離線地圖展示,支持百度、谷歌、高德、騰訊地圖
1. 基本說明 本項目實現了離線展示百度.谷歌.高德.騰訊地圖.主要功能如下: 實現了地圖瓦片圖下載.存儲.目前支持存儲至MySQL Node.js服務調用MySQL中的瓦片圖 Leaflet展示地圖 ...
usb描述符簡述(二)
title: usb描述符簡述 tags: linux date: 2018/12/18/ 18:25:23 toc: true --- usb描述符簡述 轉載自cnblog 具體描述符 https: ...
JS數組循環的性能和效率分析(for、while、forEach、map、for of)
從最簡單的for循環說起 for( 初始化:條件; ){} 條件為Trusy 值時候,可以繼續執行for 循環,當條件變為Falsy 時跳出for循環.for循環常見的四種寫法const person ...
Tour HDU - 3488 有向環最小權值覆蓋 費用流
http://acm.hdu.edu.cn/showproblem.php?pid=3488 給一個無源匯的,帶有邊權的有向圖 讓你找出一個最小的哈密頓回路 可以用KM算法寫,但是費用流也行 思路 1 ...
在當前目錄打開DOS命令窗口
Windows7系統:Shift + 鼠標右鍵 Windows10系統:Shift + 鼠標右鍵打開Power shell,在Power shell的命令窗口中輸入:start cmd
C#高級編程----錯誤和異常的總結
錯誤和異常的總結 因為總結嗎,,可能概念啥的比較多,大家要學著適應. 首先是C#中的異常用老處理系統級和用戶級的錯誤狀態,是一種結構化,統一的類型安全的處理機制. 因為鄙人開始想走C++的道路,所以搞 ...
總結
以上是生活随笔為你收集整理的windows处理回车和Linux,linux与windows回车换行符的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 前端学习(1267):axios的pos
- 下一篇: CentOS 7 配置免密码证书登录