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