Подтвердить что ты не робот

Беспорядок

Я играю с утилитой unix hexdump. Мой входной файл кодируется в кодировке UTF-8, содержащий единственный символ ñ, который C3 B1 в шестнадцатеричном UTF-8.

hexdump test.txt
0000000 b1c3
0000002

А? Это показывает B1 C3 - обратное тому, что я ожидал! Может кто-нибудь объяснить?

Для получения ожидаемого результата я делаю:

hexdump -C test.txt
00000000  c3 b1                                             |..|
00000002

Я думал, что понимаю системы кодирования.

4b9b3361

Ответ 1

Это связано с тем, что hexdump по умолчанию использует 16-битные слова, и вы работаете в архитектуре little-endian. Таким образом, последовательность байтов b1 c3 интерпретируется как шестнадцатеричное слово c3b1. Параметр -C заставляет hexdump работать с байтами вместо слов.

Ответ 2

Я нашел два способа избежать этого:

hexdump -C file

или

od -tx1 < file

Я думаю, что глупо, что hexdump решил, что файлы обычно имеют 16-битное слово little endian. Очень запутанная ИМО.