widows文本格式和Linux文本格式的区别
[root@centos8 data]#cat linux.txt #linux文本文件
a
b
c
[root@centos8 data]#cat win.txt #windows文本文件
a
b
c
#file命令可看到文件格式有所不同(主要是行结束符的不同)
[root@centos8 data]#file win.txt linux.txt
win.txt: ASCII text, with CRLF line terminators
linux.txt: ASCII text
#linux文本文件内容(十六进制)
[root@centos8 data]#hexdump -C linux.txt
00000000 61 0a 62 0a 63 0a |a.b.c.|
00000006
#windows文本文件内容(十六进制)
[root@centos8 data]#hexdump -C win.txt
00000000 61 0d 0a 62 0d 0a 63 |a..b..c|
00000007
#使用-c查看linux文本文件内容(单字节字符显示)
[root@daben ~]# hexdump -c linux.txt
0000000 a \n b \n c \n #此处可观察到 \n 对应十六进制编码0a
0000006
#使用-c查看windows文本文件内容(单字节字符显示)
[root@daben ~]# hexdump -c linux.txt
0000000 a \r\n b \r\n c \r\n #此处可观察到 \n 对应十六进制编码0a
0000007
##结论:linux和windows文本文件的主要差异在于回车符的定义。linux使用\n作为行结束符,而window使用\r\n作为行结束符。
Linux和windows文本格式相互转换
#安装转换工具
[root@centos8 data]#dnf -y install dos2unix
#将Windows的文本格式转换成的Linux文本格式
[root@centos8 data]#dos2unix
win.txt
dos2unix: converting file win.txt to Unix format...
[root@centos8 data]#file win.txt
win.txt: ASCII text
#将Linux的文本格式转换成Windows的文本格式
[root@centos8 data]#unix2dos
win.txt
unix2dos: converting file win.txt to DOS format...
[root@centos8 data]#file win.txt
win.txt: ASCII text, with CRLF line terminators
转换文件字符集编码
#显示支持字符集编码列表
[root@centos8 ~]#iconv -l
#windows7上文本默认的编码ANSI(GB2312)
[root@centos8 data]#file windows.txt
windows.txt: ISO-8859 text, with no line terminators
#查看Linux系统编码
[root@centos8 data]#echo $LANG
en_US.UTF-8
#默认在linux无法正常显示文本内容
[root@centos8 data]#cat windows.txt
▒▒▒▒▒▒[root@centos8 data]#
#将windows7上文本默认的编码ANSI(GB2312)转换成UTF-8
[root@centos8 data]#iconv -f gb2312 windows.txt -o windows1.txt
#修改编码后显示正常
[root@centos8 data]#cat windows1.txt
马哥教育[root@centos8 data]#ll windows1.txt
-rw-r--r-- 1 root root 12 Mar 23 10:13 windows1.txt
[root@centos8 data]#file windows1.txt
windows1.txt: UTF-8 Unicode text, with no line terminators
#将UTF-8转换成windows10上文本默认的编码ANSI(GB2312)
[root@centos8 data]#iconv -f utf8 -t gb2312 windows1.txt -o windows2.txt
[root@centos8 data]#file windows2.txt
windows2.txt: ISO-8859 text, with no line terminators