Window 和 Linux 下的回车换行不文本文件格式

简单的说,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

1 [oracle@logserver tmp]$ vim -b test.bin

vim 的 -b 选项是告诉 vim 打开的是一个二进制文件,不指定的话,会在后面加上 0x0a ,即一个换行符。

在命令模式下键入:

1 :%!xxd

image

如果 vim 后面没有加 -b 选项就会出现可恶的 0x0a:

image

如果有 -b 选项就不会有这种情况:

image

然后进入编辑模式改,改就是了,我将A、B对应的41、42改成61、62,将a、b对应的61、62改成41、42。

image

回到命令模式输入:

1 :%!xxd -r

image

此时可以发现AB和ab的位置互换了。

image

最后在命令模式中输入 :wq 保存退出即可。

了解这些区别,用适当的工具去查看,这样可以快速排除或者定位问题。

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