Символы Unicode, такие как U+2B71F
, обозначаются как codepoint
.
Система Unicode определяет уникальный codepoint
для каждого символа во множестве мировых языков, научных символов, валют и т. Д. Этот набор символов постоянно растет.
Например, U+221E
это бесконечность.
codepoints
- шестнадцатеричные числа.Для каждого символа всегда определено только одно число.
Есть много способов упорядочить это в памяти.Это известно как encoding
, из которых наиболее распространенными являются UTF-8
и UTF-16
.Преобразование туда и сюда хорошо определено.
Здесь вы, скорее всего, ищете преобразование юникода codepoint
в UTF-8
символов.
codepoint = "U+2B71F"
Вам необходимо извлечь шестнадцатеричную частьпосле U+
и получите только 2B71F
.Это будет первый захват группы. См. Это .
codepoint.to_s =~ /U\+([0-9a-fA-F]{4,5}|10[0-9a-fA-F]{4})$/
И ваш символ UTF-8 будет:
utf_8_character = [$1.hex].pack("U")
Ссылки:
- Преобразование кодовых точек Unicode в символы UTF-8 с помощью модуля # const_missing .
- Тим Брей о совершенстве Unicode .
- Джоэл Спольски -Абсолютный минимум Каждый разработчик программного обеспечения должен абсолютно, положительно знать о юникоде и наборах символов (без оправданий!) .
- Рассеивание регулярного выражения Unicode