LoginSignup
54
43

More than 5 years have passed since last update.

rubyでunicode, UTF8を扱うためのTips

Last updated at Posted at 2015-12-21

Unicodeコードポイント -> 文字列

0x1F5FF.chr("UTF-8")
=> "🗿"

文字列 -> Unicodeコードポイント

"🗿".codepoints.map{|v| v.to_s(16)}
=> ["1f5ff"]

文字列 -> UTF8 16進数

 "🗿".bytes.map{|v| v.to_s(16)}.join
=> "f09f97bf"

UTF8 16進数 -> 文字列

puts ["f09f97bf"].pack("H*")
🗿

絵文字か知りたい

Unicodeプロパティを使うと楽

"🗿".match(/[\p{In_Miscellaneous_Symbols_and_Pictographs}\p{In_Emoticons}]/)
=> #<MatchData "🗿">

Unicodeプロパティ?

Unicodeコンソーシアムが出した文字範囲に関する規格

Rubyの正規表現エンジン「Onigmo」で使えるUnicodeプロパティについては、以下の「Character Property」を参照

各Unicodeプロパティの文字範囲を知りたい

めちゃくちゃ長いファイルだけれど、Onigmo のヘッダファイルみればわかる

罠も多いので注意

Alphabetic

英文アルファベットではなく 全ての言葉の内、記号、数字、空白ではない文字 を指す

  • 日本語も当然ヒットする

Katakana

  • 全角カナ
  • 半角カナ
  • ㋐〜㋾ (!)
  • ㌀〜㍗ (!!!)
  • 𛀀(?)

などなど...

  • 厳密にやりたいなら、下のように正規表現を使ってコードポイントの範囲指定をした方が良いと思う

UTF-8で4バイトになる文字が知りたい

正規表現で範囲指定すれば楽

"𠮷".match(/[\u{10000}-\u{10FFFF}]/)
=> #<MatchData "𠮷">

参考

54
43
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
54
43