Các file
lệnh làm cho "best-đoán" về mã hóa. Sử dụng -i
tham số để buộc file
in thông tin về mã hóa.
Trình diễn, thuyết trình:
$ 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
Đây là cách tôi tạo các tệp:
$ echo ä > umlaut-utf8.txt
Ngày nay mọi thứ đều là utf-8. Nhưng hãy thuyết phục bản thân:
$ hexdump -C umlaut-utf8.txt
00000000 c3 a4 0a |...|
00000003
So sánh với https://en.wikipedia.org/wiki/Ä#Computer_encoding
Chuyển đổi sang các bảng mã khác:
$ iconv -f utf8 -t iso88591 umlaut-utf8.txt > umlaut-iso88591.txt
$ iconv -f utf8 -t utf16 umlaut-utf8.txt > umlaut-utf16.txt
Kiểm tra bãi chứa hex:
$ hexdump -C umlaut-iso88591.txt
00000000 e4 0a |..|
00000002
$ hexdump -C umlaut-utf16.txt
00000000 ff fe e4 00 0a 00 |......|
00000006
Tạo một cái gì đó "không hợp lệ" bằng cách trộn cả ba:
$ cat umlaut-iso88591.txt umlaut-utf8.txt umlaut-utf16.txt > umlaut-mixed.txt
Những gì file
nói:
$ 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
không có -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
Các file
lệnh không có ý tưởng về "hợp lệ" hoặc "không hợp lệ". Nó chỉ nhìn thấy một số byte và cố gắng đoán mã hóa có thể là gì. Là con người, chúng ta có thể nhận ra rằng một tệp là một tệp văn bản với một số âm sắc trong một mã hóa "sai". Nhưng là một máy tính, nó sẽ cần một số loại trí tuệ nhân tạo.
Người ta có thể lập luận rằng các heuristic của file
một số loại trí tuệ nhân tạo. Tuy nhiên, ngay cả khi nó là, nó là một rất hạn chế.
Dưới đây là thông tin thêm về file
lệnh: http://www.linfo.org/file_command.html