Dos和Unix文本文件的区别及转换
背景:由于windows和linux对换行的标识不一样,不同系统的代码传递导致代码格式的改变中可能会带来程序无法正常编译通过的问题。因此根据一些编译的错误提示,可以定位到是文件格式的问题,要对程序的文本文件进行转换。将Windows下文件传递给Linux下打开时,在Vim显示会 ^M 字符,也是由于dos文件和unix文件对换行的表示方法不同。fgets() 一行一行读取文件,读取windwos和
背景:
- 由于windows和linux对换行的标识不一样,不同系统的代码传递导致代码格式的改变中可能会带来程序无法正常编译通过的问题。因此根据一些编译的错误提示,可以定位到是文件格式的问题,要对程序的文本文件进行转换。
- 将Windows下文件传递给Linux下打开时,在Vim显示会 ^M 字符,也是由于dos文件和unix文件对换行的表示方法不同。
- 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文本文件的格式区别主要是两点:
- 换行符 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回车字符。
- 文件结束符
文件格式 | Hex |
---|---|
dos | 0x04 |
unix | 0x1A |
查看文件格式:
-
在vim中使用命令
:set ff
或:set fileformat
即可返回当前文件的文件格式(fileformat)。 -
Linux命令:
file [filename]
如果是dos文件,则会返回:
UTF-8 Unicode text, with CRLF line terminators
如果是unix文件,则会返回:
UTF-8 Unicode text
文件格式转换:
- dos2unix 和 unix2dos 工具
Linux有两个工具,可以实现文件类型相互转换。
dos2unix dosfile.txt
- 使用Vim
使用Vim打开文件
DOS转UNIX::set fileformat=unix
UNIX转DOS::set fileformat=dos
保存退出::wq
命令中 fileformat 也可以用 ff 来代替,并可以输入:help fileformat
来获得跟多的关于选项信息。
关于Vim设置:
在Vim中有两个参数可以设置fileformat, fileformats ,具体可以通过帮助手册来了解它们。
:help fileformat
更多推荐
所有评论(0)