file
คำสั่งทำให้ "ดีที่สุดคาดเดา" เกี่ยวกับการเข้ารหัส ใช้-i
พารามิเตอร์เพื่อบังคับfile
ให้พิมพ์ข้อมูลเกี่ยวกับการเข้ารหัส
สาธิต:
$ file -i *
umlaut-iso88591.txt: text/plain; charset=iso-8859-1
umlaut-utf16.txt: text/plain; charset=utf-16le
umlaut-utf8.txt: text/plain; charset=utf-8
นี่คือวิธีที่ฉันสร้างไฟล์:
$ echo ä > umlaut-utf8.txt
ทุกอย่างในปัจจุบันคือ utf-8 แต่โน้มน้าวตัวเอง:
$ hexdump -C umlaut-utf8.txt
00000000 c3 a4 0a |...|
00000003
เปรียบเทียบกับhttps://en.wikipedia.org/wiki/Ä#Computer_encoding
เปลี่ยนเป็นการเข้ารหัสอื่น ๆ :
$ iconv -f utf8 -t iso88591 umlaut-utf8.txt > umlaut-iso88591.txt
$ iconv -f utf8 -t utf16 umlaut-utf8.txt > umlaut-utf16.txt
ตรวจสอบดัมพ์หกเหลี่ยม:
$ hexdump -C umlaut-iso88591.txt
00000000 e4 0a |..|
00000002
$ hexdump -C umlaut-utf16.txt
00000000 ff fe e4 00 0a 00 |......|
00000006
สร้างบางอย่าง "ไม่ถูกต้อง" โดยผสมทั้งสามอย่าง:
$ cat umlaut-iso88591.txt umlaut-utf8.txt umlaut-utf16.txt > umlaut-mixed.txt
file
พูดว่าอะไร:
$ file -i *
umlaut-iso88591.txt: text/plain; charset=iso-8859-1
umlaut-mixed.txt: application/octet-stream; charset=binary
umlaut-utf16.txt: text/plain; charset=utf-16le
umlaut-utf8.txt: text/plain; charset=utf-8
ไม่มี-i
:
$ file *
umlaut-iso88591.txt: ISO-8859 text
umlaut-mixed.txt: data
umlaut-utf16.txt: Little-endian UTF-16 Unicode text, with no line terminators
umlaut-utf8.txt: UTF-8 Unicode text
file
คำสั่งมีความคิดไม่ "ถูกต้อง" หรือ "ไม่ถูกต้อง" มันเพิ่งเห็นไบต์และพยายามเดาว่าการเข้ารหัสอาจเป็นอะไร ในฐานะมนุษย์เราอาจสามารถรับรู้ได้ว่าไฟล์เป็นไฟล์ข้อความที่มีเครื่องหมายบางอันในการเข้ารหัส "ผิด" แต่ในฐานะคอมพิวเตอร์มันต้องมีปัญญาประดิษฐ์บางอย่าง
บางคนอาจแย้งว่าฮิวริสติกfile
ของปัญญาประดิษฐ์ ถึงแม้ว่ามันจะเป็นแบบ จำกัด ก็ตาม
นี่คือข้อมูลเพิ่มเติมเกี่ยวกับfile
คำสั่ง: http://www.linfo.org/file_command.html