Смайлики, схоже, задаються у форматі U + xxxxx,
де кожен x - шістнадцятковий розряд.
Наприклад, U + 1F615 є офіційним кодом консорціуму Unicode для "плутаного обличчя" 😕
Оскільки мене часто плутають, у мене є сильна спорідненість до цього символу.
Представлення U + 1F615 мене бентежить, тому що я вважав, що для єдиного кодування для символів Unicode потрібні 8, 16, 24 або 32 біта, тоді як для 5-ти шістнадцяткових цифр потрібно 5x4 = 20 біт.
Я виявив, що цей символ, здається, представлений зовсім іншою шістнадцятковою рядком у баші:
$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-бітний код?
Чи існує зв’язок між цими 2 числами?
\U1F615
слідує інша дійсна шістнадцяткова цифра, то це вважатиметься частиною послідовності відходу. Щоб змусити його працювати незалежно від того, за чим він слідує, йому повинно бути достатньо\U0001F615