Window 和 Linux 下的回车换行不文本文件格式
时间:2010-11-11 来源:RocZhang
简单的说,window文件换行是 “/r/n”, 而Linux文件的换行是 “/n”, 所以将文件从window 下直接复制到 Linux 和就有问题。 用vim 打开挥发现 ^M 的字符在每一行尾。
但是好多软件,会直接去处理这些区别。 比如notepad++, 会打开文件如果发现是“/r” 或者是“/r/n” 都会显示新行。 perforce 也对此有处理,比如先将文件从window下提交到perforce,然后再从perforce同步到Linux/Unix平台下, perforce 会自动转换“/r/n” 到“/n“;反之,文件从Linux提交到perforce, 在同步到Windows, 这是perforce把“/n” 转换为“/r/n”。
因为这些软件处理不同平台下的回车换行不同,所以我们很少注意到。 但是有时候问题就出现在这看不见的回车换行符里面。那么怎么检查?
用二进制去查看这些文件,可以方便查看不用。 比如: vim 下 %!xdd 打开查看。
下面一个查看二进制的例子来源于http://www.cnblogs.com/killkill/archive/2010/06/23/1763785.html
首先创建一个二进制文件:
1 | [oracle@logserver tmp]$ echo -n "ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz" > test.bin |
2 | [oracle@logserver tmp]$ cat test.bin |
3 | ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz[oracle@logserver tmp]$ |
注意echo 一定要跟上 -n 选项,否则会被自动加上一个换行行,再用vim打开 test.bin
view source print?1 | [oracle@logserver tmp]$ vim -b test.bin |
vim 的 -b 选项是告诉 vim 打开的是一个二进制文件,不指定的话,会在后面加上 0x0a ,即一个换行符。
在命令模式下键入:
view source print?1 | :%!xxd |
如果 vim 后面没有加 -b 选项就会出现可恶的 0x0a:
如果有 -b 选项就不会有这种情况:
然后进入编辑模式改,改就是了,我将A、B对应的41、42改成61、62,将a、b对应的61、62改成41、42。
回到命令模式输入:
view source print?1 | :%!xxd -r |
此时可以发现AB和ab的位置互换了。
最后在命令模式中输入 :wq 保存退出即可。
了解这些区别,用适当的工具去查看,这样可以快速排除或者定位问题。