Предположим, что у меня есть строка, возвращенная в Json, как
004100610061
Строка. Но, если интерпретируется как Шестнадцатеричное число, и затем как Unicode, это будет означать
Aaa
Какой Hex-редактор может обеспечить способность декодировать это?
С Благословляют, я смог вставить шестнадцатеричное число, но не делаю способный видеть Unicode.
Вы могли просто использовать xxd. Например:
xxd -r -p <(echo 004100610061)
, Конечно, что привычка вставила дополнительную новую строку, таким образом, Вы могли бы хотеть сразу вызвать эхо также, например:
xxd -r -p <(echo 004100610061) ; echo
С другой стороны, возможно, сумасшедшее перенаправление делает те команды сбивающими с толку, поэтому возможно, могло бы быть легче следовать за тем, что это делает этот путь:
echo 004100610061 | xxd -r -p ; echo
xxd читает вход из эха, и-r говорит для движения от шестнадцатеричного дампа назад к двоичному файлу, и-p говорит, забывают о поиске информации об адресе в шестнадцатеричном дампе, и затем эхо вставляет дополнительную новую строку. Таким образом, эти команды - все просто xxd чтение его входа из стандарта в, преобразование шестнадцатеричных значений назад в двоичный файл и затем отображение их.
Редактирование: Как @Rudd указывает, это просто будет двоичным выходом. Ваш терминал, вероятно, проигнорирует непечатаемые биты и глупо интерпретирует его как ASCII, так прикрепите некоторые дополнительные байты на там и перенаправьте Ваш вывод в файл для более точного преобразования.
, Например, если Вы знаете, Ваш вход является обратным порядком байтов utf-16:
echo feff004100610061 | xxd -r -p > output.txt
представление Then результат в unicode-осведомленном редакторе.
, Например:
vim output.txt
Для другого кодирования BOM, см. Википедия
Можно уйти из установки дополнительного мягкий и использовать редактора Vi/Vim, который интегрируется в любом дистрибутиве Linux.
команда (:s
) замены Vi позволяет делать это через следующий шаблон:
:%s/\(\x\{4\}\)/\=nr2char('0x'.submatch(1),1)/g
Простой :s
замена только текущая строка, тогда как :%s
замены кодирует во всех строках.
существует несколько других способов упростить представление Unicode в Vim, но они требуют диграфы установки или плагины.
Примечание: для вышеупомянутой реализации Вам нужен полнофункциональный VIM, но не крошечные VIM. nr2char
параметр допустим только от версии 7.4, если у Вас есть более низкая версия VIM, можно поместить этот параметр в стороне, который не должен влиять на функциональность всегда.
В Perl:
echo 004100610061 | perl -CS -pe 's/[0-9A-F]{4}/chr(hex($&))/egi'
Вывод:
Aaa
Параметр командной строки -CS
силы производят, чтобы быть закодированным UTF-8.