Ответ 1
Как насчет:
puts ["2B71F".hex].pack("U")
Edit
В Ruby 1.9 вы можете даже сделать это:
puts "\u{2B71F}"
т.е. escape-последовательность \u{}
может использоваться для декодирования кодовых точек Unicode.
У меня эти значения из базы данных юникода, но я не уверен, как перевести их в читаемую человеком форму. Что они даже называют?
Вот они:
U+2B71F
U+2A52D
U+2A68F
U+2A690
U+2B72F
U+2B4F7
U+2B72B
Как я могу преобразовать их в читаемые символы?
Как насчет:
puts ["2B71F".hex].pack("U")
Edit
В Ruby 1.9 вы можете даже сделать это:
puts "\u{2B71F}"
т.е. escape-последовательность \u{}
может использоваться для декодирования кодовых точек Unicode.
Символы unicode, такие как U+2B71F
, называются codepoint
.
Юникодная система определяет уникальный codepoint
для каждого символа на множестве мировых языков, научных символов, валют и т.д. Этот набор символов неуклонно растет.
Например, U+221E
- бесконечность.
codepoints
- шестнадцатеричные числа. Всегда существует только одно число, определенное для каждого символа.
Есть много способов организовать это в памяти. Это известно как encoding
, общее из которых UTF-8
и UTF-16
. Преобразование туда и обратно хорошо определено.
Здесь вы, скорее всего, ищете преобразование символов unicode 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")
Литература: