Беспорядок
Я играю с утилитой unix hexdump. Мой входной файл кодируется в кодировке UTF-8, содержащий единственный символ ñ
, который C3 B1
в шестнадцатеричном UTF-8.
hexdump test.txt
0000000 b1c3
0000002
А? Это показывает B1 C3
- обратное тому, что я ожидал! Может кто-нибудь объяснить?
Для получения ожидаемого результата я делаю:
hexdump -C test.txt
00000000 c3 b1 |..|
00000002
Я думал, что понимаю системы кодирования.
Ответы
Ответ 1
Это связано с тем, что hexdump по умолчанию использует 16-битные слова, и вы работаете в архитектуре little-endian. Таким образом, последовательность байтов b1 c3
интерпретируется как шестнадцатеричное слово c3b1
. Параметр -C
заставляет hexdump работать с байтами вместо слов.
Ответ 2
Я нашел два способа избежать этого:
hexdump -C file
или
od -tx1 < file
Я думаю, что глупо, что hexdump решил, что файлы обычно имеют 16-битное слово little endian. Очень запутанная ИМО.