補間を使用してユニコード文字列を動的に作成したいという要件があります。 irbで試した次のコードを参照してください。
2.1.2 :016 > hex = 0x0905
=> 2309
2.1.2 :017 > b = "u#{hex}"
SyntaxError: (irb):17: invalid Unicode escape
b = "u#{hex}"
16進コード0x0905は、DEVANAGARI LETTER Aの独立母音のUnicodeに対応します。
望ましい結果を達成する方法がわかりません。
回答:
回答№1の場合は3エンコードを渡すことができます Integer#chr
:
hex = 0x0905
hex.chr("utf-8") #=> "अ"
以下の場合、パラメーターは省略できます。 Encoding::default_internal
utf-8に設定されます。
$ ruby -E utf-8:utf-8 -e "p 0x0905.chr"
"अ"
他の文字列にコードポイントを追加することもできます:
"" << hex #=> "अ"
回答№2の場合は1
文字列の補間が行われます 後 rubyはエスケープをデコードするため、あなたがしようとしていることはrubyによって不完全なエスケープのように解釈されます。
数字からユニコード文字を作成するには、次のことが必要です。 pack
それ:
hex = 0x0905
[hex].pack("U")
=> "अ"