/ / Rubyが動的にUnicode文字列を作成しようとすると、「無効なUnicodeエスケープ」エラーが発生します-ruby、string、dynamic、unicode

Rubyが動的にUnicode文字列を作成しようとすると "無効なUnicodeエスケープ"エラーが発生する - ruby​​、string、dynamic、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}"

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")
=> "अ"