2013年10月17日木曜日

Rubyの文字列リテラルのUnicodeエスケープがうまくいかない時

Ruby 2.0 にて確認した内容です。

Rubyの文字列リテラルはバックスラッシュ記法を用いてUnicode文字をコードポイントから表示することが出来ます。
(\uXXXXの形式)

>> puts "\u3042"
>> あ


しかし、コードポイントが5桁の場合、この書き方だとうまくエスケープされません。
(前半4桁と最後の1桁の2文字扱いになる)

>> puts "\u20e95"
>>  ⃩5


この場合、以下の様にコードポイント部分を{}で囲むと期待通りにエスケープされます。
(\u{XXXX}の形式)

>> puts "\u{20e95}"
>> 𠺕


また、この形式ならば、スペースで区切ることで複数コードを一度にエスケープできます

>> puts "\u{20e95 3042}"

0 件のコメント:

コメントを投稿