Смайлики, по-видимому, указываются с использованием формата U + xxxxx,
где каждый x является шестнадцатеричной цифрой.
Например, U + 1F615 является официальным кодом Консорциума Unicode для «запутанного лица» 😕
Как я часто путаюсь, я очень привязан к этому символу.
Представление U + 1F615 сбивает меня с толку, потому что я думал, что единственные возможные кодировки для символов Юникода требуют 8, 16, 24 или 32 бита, тогда как 5 шестнадцатеричных цифр требуют 5x4 = 20 бит.
Я обнаружил, что этот символ представляется совершенно другой шестнадцатеричной строкой в bash:
$echo -n 😕 | hexdump
0000000 f0 9f 98 95
0000004
$echo -e "\xf0\x9f\x98\x95"
😕
$PS1=$'\xf0\x9f\x98\x95 >'
😕 >
Я ожидал, что U + 1F615 преобразуется во что-то вроде \ x00 \ x01 \ xF6 \ x15 .
Я не вижу связи между этими двумя кодировками?
Когда я ищу символ в официальном списке Консорциума Unicode , я хотел бы иметь возможность использовать этот код напрямую, без необходимости вручную его утомительно конвертировать. т.е.
- найти символ на какой-то веб-странице
- скопировать его в буфер обмена веб-браузера
- вставив его в bash, чтобы повторить через hexdump, чтобы обнаружить РЕАЛЬНЫЙ код.
Могу ли я использовать этот 20-битный код, чтобы определить, что такое 32-битный код?
Существует ли связь между этими двумя числами?
\U1F615
за ним следует другая действительная шестнадцатеричная цифра, она будет считаться частью escape-последовательности. Чтобы заставить его работать независимо от того, что за ним следует, должно быть достаточно\U0001F615