/ / Ruby се опитва динамично да създаде Unicode низ хвърля "невалиден Unicode escape" грешка - рубин, низ, динамичен, unicode

Ruby се опитва динамично да създаде Unicode низ хвърля "невалиден Unicode бягство" грешка - рубин, низ, динамичен, unicode

Имам изискване, в което искам да се създаде динамично unicode низ използване интерполация.За напр. моля, вижте следния код, опитан в irb

2.1.2 :016 > hex = 0x0905
=> 2309
2.1.2 :017 > b = "u#{hex}"
SyntaxError: (irb):17: invalid Unicode escape
b = "u#{hex}"

Хекс-кодът 0x0905 съответства на unicode за независима гласна за DEVANAGARI LETTER A.

Не мога да разбера как да постигнете желания резултат.

Отговори:

3 за отговор № 1

Можете да преминете кодиране към Integer#chr:

hex = 0x0905
hex.chr("utf-8") #=> "अ"

Параметърът може да бъде пропуснат, ако Encoding::default_internal е настроен на utf-8:

$ ruby -E utf-8:utf-8 -e "p 0x0905.chr"
"अ"

Можете също да добавяте кодови точки към други низове:

"" << hex #=> "अ"

1 за отговор № 2

Интервалът на низовете се случва след ruby декодира бягството, така че това, което се опитвате да направите, се интерпретира от рубин като непълна бягство.

За да създадете unicode символ от номер, трябва да го направите pack то:

hex = 0x0905
[hex].pack("U")
=> "अ"