Dos和Unix文本文件的区别及转换

背景:

  1. 由于windows和linux对换行的标识不一样,不同系统的代码传递导致代码格式的改变中可能会带来程序无法正常编译通过的问题。因此根据一些编译的错误提示,可以定位到是文件格式的问题,要对程序的文本文件进行转换。
  2. 将Windows下文件传递给Linux下打开时,在Vim显示会 ^M 字符,也是由于dos文件和unix文件对换行的表示方法不同。
  3. fgets() 一行一行读取文件,读取windwos和linux下的文件没有问题,但是读取mac的文件却不能正常读入。

原因是fgets()是以\n来判断一行的,而mac文本文件以\r来结束一行。将mac文件转为dos文件即可正常读取。也可以用getdelim()或getline()函数来解决这个问题,因为在这两个函数中用个参数表示终结符,也就是说自己说明什么字符是终结符。
如果要做到通用的话,还得判断文本文件是什么格式的文件,也好知道传入哪一个终结符的参数。
来源:https://blog.csdn.net/miaozk2006/article/details/82416939

区别:

MS-Windows 默认使用的文件格式是:dos
Unix,Linux 默认的文件格式是:unix
当然也有mac的文件格式。

unix和dos文本文件的格式区别主要是两点:

  1. 换行符 end of line (<EOL>)
文件格式 风格 Hex
dos <CR> <NL> (\r\n) 0x0D0A
unix <NL> (\n) 0x0A
mac <CR> (\r) 0x0D

其中<NL> 等价于<LF>。
Windows下换行使用CRNL(\r\n)两个字符来表示,其中CR为回车(ASCII=0x0D),NL为换行(ASCII=0x0A),而在Linux下使用NL一个字符来表示。因此在Linux下使用vi来查看一些Windows下创建的文本文件时,有时会发现在每一行尾部有^M字符,其实它是显示CR回车字符。

  1. 文件结束符
文件格式 Hex
dos 0x04
unix 0x1A

查看文件格式:

  1. 在vim中使用命令 :set ff:set fileformat 即可返回当前文件的文件格式(fileformat)。

  2. Linux命令:

file [filename]

如果是dos文件,则会返回:

UTF-8 Unicode text, with CRLF line terminators

如果是unix文件,则会返回:

UTF-8 Unicode text

文件格式转换:

  1. dos2unixunix2dos 工具

Linux有两个工具,可以实现文件类型相互转换。

dos2unix dosfile.txt
  1. 使用Vim

使用Vim打开文件

DOS转UNIX::set fileformat=unix

UNIX转DOS::set fileformat=dos

保存退出::wq

命令中 fileformat 也可以用 ff 来代替,并可以输入:help fileformat来获得跟多的关于选项信息。

关于Vim设置:

在Vim中有两个参数可以设置fileformat, fileformats ,具体可以通过帮助手册来了解它们。
:help fileformat

猜你喜欢

转载自blog.csdn.net/qq_37151416/article/details/111039516
今日推荐