Вопрос
Я играю с утилитой Unix Hexdump. Мой входной файл является кодировкой UTF-8, содержащий один символ ñ
, который C3 B1
В шестнадцатеричном УТФ-8.
hexdump test.txt
0000000 b1c3
0000002
Хм? Это показывает B1 C3
- инверсия того, что я ожидал! Может кто-то объяснить?
Для получения ожидаемого вывода я делаю:
hexdump -C test.txt
00000000 c3 b1 |..|
00000002
Я думал, что я понимаю системы кодирования ..
Решение
Это связано с тем, что Hexdump по умолчанию использует 16-битные слова, и вы работаете на небольшой эндеанной архитектуре. Последовательность байта b1 c3
Таким образом, интерпретируется как шестнадцатеричное слово c3b1
. Отказ То -C
Вариант заставляет Hexdump работать с байтами вместо слов.
Другие советы
Я нашел два способа избежать этого:
hexdump -C file
или
od -tx1 < file
Я думаю, что это глупо, что Hexdump решил, что файлы обычно 16bit Word Little Endian. Очень запутанному ИМО.