I have a requirement wherein I want to dynamically create a unicode string using interpolation.For e.g. please see the following code tried out in irb
2.1.2 :016 > hex = 0x0905
=> 2309
2.1.2 :017 > b = "\u#{hex}"
SyntaxError: (irb):17: invalid Unicode escape
b = "\u#{hex}"
The hex-code 0x0905 corresponds to unicode for independent vowel for DEVANAGARI LETTER A.
I am unable to figure how to achieve the desired result.
You can pass an encoding to Integer#chr
:
hex = 0x0905
hex.chr('UTF-8') #=> "अ"
The parameter can be omitted, if Encoding::default_internal
is set to UTF-8:
$ ruby -E UTF-8:UTF-8 -e "p 0x0905.chr"
"अ"
You can also append codepoints to other strings:
'' << hex #=> "अ"
String interpolation happens after ruby decodes the escapes, so what you are trying to do is interpreted by ruby like an incomplete escape.
To create a unicode character from a number, you need to pack
it:
hex = 0x0905
[hex].pack("U")
=> "अ"
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With