Mar 26

[转]关于文本文件的格式------回车换行符(CR/LF) 不指定

felix021 @ 2008-3-26 21:54 [IT » 其他] 评论(3) , 引用(0) , 阅读(17561) | Via 本站原创 | |
from http://hi.baidu.com/dbsuit/blog/item/97a954df6776da11495403af.html

以前也看到EditPlus里面文本文件可以设置PC/UNiX/MAC三种格式,UltraEdit中可以设置DOS格式和Unix格式,一直不知道区别在那里。
    今天在使用boost::tokenizer按'\n'切割字符时,发现从文件中读到的字符串无法进行正常切割。回想起在用EditPlus打开文件时, 会提示文件中包含不合法的回车换行符,是否进行转换云云。看来碰到格式的问题了。当时只好采用别的方法绕了过去。回来查找资料,终于被我找到了。
    原来回车(CR)和换行(LF)符都是用来表示“下一行”的。而标准没有规定要使用哪一个。于是产生了三种不同的用法:Dos和windows采用回车+ 换行(CR+LG)表示下一行(亦即所谓的PC格式,谁让MS最早雄踞PC市场呢,^_^),UNIX采用换行符(LF)表示下一行,MAC机采用回车符 (CR)表示下一行。当在不同的系统间传递文件,就要涉及格式的转换。
     又长见识了。。

原始链接如下:
Unix和Windows間的文字檔轉換
在用電報通訊的年代,人們發明了一種用7bits把常用的英文和標點編碼的方法 — 這就是至今還在電腦世界應用的ASCII。

電 報機每當打印到一行結尾時便需要「跳進下一行」並「回到第一格」,因此ASCII有LF(Line Feed, 0×0A) 和CR(Carriage Return, 0×0D)。在電腦的世其實並不需要用兩個字符代表「下一行」的意思,為了省資源,在設計OS時一些人就決定用其中一個字符代表「下一行」1,因為大家選擇不同,做成了不同系統的「下一行」符號不同的問題。

這 問題常見於在 Windows 上傳一些檔案到 Unix Server 中,如果不經轉換 Unix 會見到一些古怪符號 (顯示成^M的CR字符)。如果己經有一堆Windows的文字檔,怎樣把它們轉換成Unix的文字檔?不用自己寫轉換軟件,你可以使用Unix command tr (translate) 或 sed (Stream Editor):

# USE tr TO REMOVE CR CHARACTER
tr -d '\r' < oldfile > newfile


# USE sed, IN UNIX ENVIRONMENT: convert DOS newlines (CR/LF) to Unix format
sed 's/.$//' # assumes that all lines end with CR/LF
sed 's/^M$//' # in bash/tcsh, press Ctrl-V then Ctrl-M

# USE sed, IN UNIX ENVIRONMENT: convert Unix newlines (LF) to DOS format
sed "s/$/`echo -e \\\r`/" # command line under ksh
sed 's/$'"/`echo \\\r`/" # command line under bash




欢迎扫码关注:




转载请注明出自 ,如是转载文则注明原出处,谢谢:)
RSS订阅地址: https://www.felix021.com/blog/feed.php
Tags:
游客
2009-11-13 21:10
能否再请教一下,文本中的制表符要换成几个空格可用什么命令?谢了
felix021 回复于 2009-11-14 21:05
用word可以指定替换换行符
游客
2009-11-13 21:07
太神奇了,对我帮助很大。一直搞不定这个换行符。谢谢
游客
2008-3-27 16:31
细致啊。。。
分页: 1/1 第一页 1 最后页
发表评论
表情
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
打开HTML
打开UBB
打开表情
隐藏
记住我
昵称   密码   *非必须
网址   电邮   [注册]