Допустим, у меня есть два файла, как показано ниже:
$ ll
total 8
-rw-rw-r--. 1 matias matias 6 Nov 27 20:25 ascii.txt
-rw-rw-r--. 1 matias matias 8 Nov 28 21:57 unicode.txt
Оба содержат одну строку текста, но во втором файле есть дополнительный символ, как показано здесь (греческая буква Sigma):
$ cat ascii.txt
matias
$ cat unicode.txt
matiasΣ
Если я пропущу их через команду file , это будет вывод:
$ file *
ascii.txt: ASCII text, with no line terminators
unicode.txt: UTF-8 Unicode text, with no line terminators
Что кажется нормальным.Теперь, если я сделаю hexdump из файла, я получу это:
$ hexdump -C ascii.txt
00000000 6d 61 74 69 61 73 |matias|
00000006
$ hexdump -C unicode.txt
00000000 6d 61 74 69 61 73 ce a3 |matias..|
00000008
Итак, мой вопрос, как приложение с именем cat знает, что последнеедва байта на самом деле один символ Unicode .Если я печатаю последние два байта по отдельности, я получаю:
$ printf '%d' '0xce'
206
$ printf '%d' '0xa3'
163
Что в расширенном ASCII:
$ py3 -c 'print(chr(206))'
Î
$ py3 -c 'print(chr(163))'
£
Моя логика неверна?Чего мне здесь не хватает?