Используйте Ruby для генерации шестнадцатеричных кодовых точек для значений Unicode - PullRequest
0 голосов
/ 04 мая 2018

Я хочу использовать Ruby для преобразования кодовых точек в значения, которые легко найти в ссылках Unicode.

Я знаю, что могу получить саму кодовую точку, используя String#codepoints, ("a".codepoints => [97]), но я хочу вывести следующее через несколько методов, давайте назовем их convert_unicode, convert_unicode_to_hex и convert_unicode_to_codepoints ради этого вопроса:

character = "a"
character.codepoints => [97]
convert_unicode("97") => "U+0061"
convert_unicode_to_hex("U+0061") => 0x61
convert_unicode_to_codepoints("U+0061") => 97

Я пытался использовать 97.to_s(16), но потом попал в беспорядок, когда добавлял отступы 0, потому что еще один пример Юникода, для которого я хотел бы работать, это U+1F028. Как бы вы подошли к этой проблеме?

Ответы [ 2 ]

0 голосов
/ 04 мая 2018

Вы можете использовать format:

format('U+%04X', 97)     #=> "U+0061"
format('U+%04X', 127016) #=> "U+1F028"
  • U+ истолковано буквально
  • % начало последовательности форматирования
  • 0 колодка с нулями
  • 4 минимальная ширина 4 символа
  • X преобразовать аргумент в верхний регистр шестнадцатеричного числа
0 голосов
/ 04 мая 2018

Использование String#rjust:

[97, 127016].map { |i| "U+" << i.to_s(16).upcase.rjust(4, '0') }
#⇒ ["U+0061", "U+1F028"]

Для других операций:

"U+0061"[/(?<=\AU\+).*/].to_i(16)
#⇒ 97
"U+0061"[/(?<=\AU\+).*/].prepend('0x')
#⇒ "0x0061"

NB: 0x61 может существовать только как строка, поскольку 0x61 и 97 внутренне являются одним и тем же значением, оба представлены 97.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...