windows,linux,unix 裏的 \r \n解釋

回車('\r')和換行('\n'),坑爹的Windows .

前段時間移植一個windows下的程序到vxWorks下,由於原程序要讀取配置文件,所以我
將它們一起放在了nor flash裏,好不容易搞定了編譯錯誤,一運行程序就出錯,進去調試,

發現讀到的信息全是錯的!!不會吧,細細一看,fopen讀上來的字符串是這樣的"First Line

\r\nSecond Line\r\n...",再去看看VS裏面讀的,卻是這樣的:"First Line\nSecond

Line\n...",查了查資料,發現了問題所在。
     在計算機還沒有出現之前,有一種叫做電傳打字機(Teletype Model 33)的玩意,每

秒鐘可以打10個字符。但是它有一個問題,就是打完一行換行的時候,要用去0.2秒,正好可

以打兩個字符。要是在這0.2秒裏面,又有新的字符傳過來,那麼這個字符將丟失。 於是,

研製人員想了個辦法解決這個問題,就是在每行後面加兩個表示結束的字符。一個叫做“回

車”,告訴打字機把打印頭定位在左邊界;另一個叫做“換行”,告訴打字機把紙向下移一

行。 這就是“換行”和“回車”的來歷,從它們的英語名字上也可以看出一二。 後來,計

算機發明瞭,這兩個概念也就被般到了計算機上。那時,存儲器很貴,一些科學家認爲在每

行結尾加兩個字符太浪費了,加一個就可以。於是,就出現了分歧。Unix 系統裏,每行結尾

只有“<換行>”,即“\n”;Windows系統裏面,每行結尾是“<回車><換行>”,即“ \r\n

”;Mac系統裏,每行結尾是“<回車>”。一個直接後果是,Unix/Mac系統下的文件在

Windows裏打開的話,所有文字會變成一行;而Windows裏的文件在Unix/Mac下打開的話,在

每行的結尾可能會多出一個^M符號。


然而,讓人鬱悶的是,windows下的C標註庫函數fopen卻不會把文本中的回車符'\r'讀出

來,我們上C語言課應該很清楚,沒有書會把'\r'列出來告訴你是回車的,也沒有書告訴你,

編程時換行就是'\n'而不是"\r\n"的。這個太坑爹了啊!!還是linux下的fopen靠譜,會把

從windows複製過來的文本讀出"\r\n",然而這個帶來的問題各位應該很清楚的,我們的程序

識別換行都是'\n',而現在'\r'卻先出現,從而導致讀取的錯誤。
   要解決它很簡單,用UtrlaEdit將文件從DOS轉到Unix格式就可以將回車符去掉,然後重新

下載到nor flash裏就可以用啦!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章