Подтвердить что ты не робот

Преобразование кодировки unicode в строковый символ в Ruby

У меня эти значения из базы данных юникода, но я не уверен, как перевести их в читаемую человеком форму. Что они даже называют?

Вот они:

  • U+2B71F
  • U+2A52D
  • U+2A68F
  • U+2A690
  • U+2B72F
  • U+2B4F7
  • U+2B72B

Как я могу преобразовать их в читаемые символы?

4b9b3361

Ответ 1

Как насчет:

puts ["2B71F".hex].pack("U")

Edit

В Ruby 1.9 вы можете даже сделать это:

puts "\u{2B71F}"

т.е. escape-последовательность \u{} может использоваться для декодирования кодовых точек Unicode.

Ответ 2

Символы 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")

Литература: