CR LF (转)

以前也看到EditPlus里面文本文件可以设置PC/UNiX/MAC三种格式,UltraEdit中可以设置DOS格式和Unix格式,一直不知道区别在那里。原来回车(CR)和换行(LF)符都是用来表示"下一行"的。于是产生了三种不同的用法:Dos和windows采用回车+换行(CR+LF)表示下一行(亦即所谓的PC格式,谁让MS最早雄踞PC市场呢,^_^),UNIX采用换行符(LF)表示下一行,MAC机采用回车符(CR)表示下一行。

涉及在PC和Unix两个平台下工作的人, 或注意过UltraEdit中三种文本文件格式的人, 或知道vim中:set fileformat选项的人, 应该知道在当今的电脑世界中, 存在三种文本格式:

PC: 或者说DOS的, 或者说微软的, 或者说WINDOWS的, 以<CR><LF>为行尾的标志. 其中<CR>的ASCII是十进制数的13, 十六进制的0x0D. <LF>的ASCII是十进制10, 十六制为0x0A.

Mac: 以<CR>作为文本文件行尾的标志符

UNIX: 以<LF>作为文本文件行尾标志符

在很多计算机语言中, <CR>表示为字符或字符串是/r, 而<LF>表示为字符或字符中是/n

而在printf这样的函数中, 如果你出现一个/n, 它却代表了一个逻辑上的意义, 即它代表在本地系统上的那种回车换行, 所以它在UNIX上只是<LF>, 但如果你在DOS上用诸如Truboc编程的话它输出的是<CR><LF>

Unix上有一个小工具, 专门在两种文件格式之间进行转换, 叫unix2dos, dos2unix.

在UltraEdit的 File->Conversions菜单中, 有三个子菜单项就是专供你在各种文本格式之间转换的.

在vim中, 如果你想把一个文件存为另一种文件格式, 只需:set fileformat=unix或等号后面是dos, mac即可, 接下来的存盘动作就会自动把你的文件存为指定平台的格式

怎么查看一个既有文件的格式:

unix上: file filename

注意第一个file是一个命令, 它会报告给定的文件的类型. 实际上它维护了一个各种文件类型特征的一个数据库, 可以告诉你任何文件的类型(当然前提是得先编进入数据库), 不光是文本文件格式这种小儿科

windows上:

我实在想不出来太好的办法, 你可以用记事本打开, 如果正常就是一个DOS格式的, 如果出现一个超长的变态的行, 那可能是unix的也可能是mac的格式, 我在winxp上试验的结果是这两种格式引起的外在表现都一样.

用cygwin中的file命令, 如上.

用cygwin中的 sed -n 1p filename.txt | xxd -g1

看最后显示的两个十六进制数是0D 0A还是其中的数加一个0A

标准谁订的, 谁必需遵循的

不是操作系统, 不是哪个程序, 更不是硬件. 它仅仅是一种约定俗成. 所以你完全可以在一个平台下使用另一个平台的文本格式, 只要所有处理到这个文本文件的程序都要知晓这一约定. 它其实只是各个程序之间的一种约定, 比如你用word创建了一个文件, 另存为纯文本时, 它当然存为DOS格式的了, 而同样是微软的程序记事本也是假设同样的格式, 所以它们能工作的很好, 再往系统下面一点看, C语言中的函数库, 凡是在DOS/WINDOWS平台上的实现, 它也会考虑同样的约定, 这样你用fputs或fgets来写/读文本文件时, 写入的自然也就是<CR><LF>了.

其它平台的情形自然也类似.

ftp的考虑.

一些ftp的客户端程序会自动进行各个平台的文本文件格式转换. 所以要注意你在ftp中用ls看看到的文件大小未必是你下载下来的文件大小. 上传过程也是一样.

如果你不想ftp这样自作主张只要用bin命令即可. 它会告诉ftp进行逐字节的高保真二进制模式传输.

每个文件都从一而终吗

不必然. 我在linux中经常碰到一些文件被莫名其妙地弄得雌雄莫辨, 一些行是DOS格式的, 一些行是UNIX格式的, 这么说可能会让人越来越乱, 怎么可能在UNIX上有DOS格式的呢. 又怎么可能一个文件内部有两种格式呢. 了解了这个问题的实质其实上面所说都只是一些文字上的方便, 或者说文字上造成的不方便. 所谓DOS文本格式无非是可见文字编码(不仅限于ASCII了, 中文文本文件也算是)中间插入了<CR><LF>这两个字符. 而UNIX文本格式也无非是以<LF>作分隔罢了. 它一会以这个分隔一会以那个分隔就是所说的混合格式了.

碰到这种文件unix2dos和dos2unix两个工具仍然能应付. 但对于vim就不行了. 简单的:set ff=unix会让它莫衷一是, 因为文件的一部分已经是unix的了. 它也确实是把文件在内部认为是unix格式了. 此时就只能把多余的<CR>干掉了. 它在vim中显示是一个^M字符. 视你的终端和颜色配置情况, 往往还带着扎眼的亮色.

:%s#^M##g

上面命令中的^M是一个字符, 代表回车, 输入的办法是在UNIX中先按<C-V>再按回车键, 在windows中要先按<C-Q>, 再按回车键, 原因只是在WINDOWS中大家已经习惯用<C-V>来粘贴, 所以VIM把这个键映射到了<C-Q>上.

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值