rubyでunicode, UTF8を扱うためのTips
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*")
🗿
絵文字か知りたい
0x1F5FF.chr("UTF-8")
=> "🗿"
"🗿".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*")
🗿
絵文字か知りたい
"🗿".bytes.map{|v| v.to_s(16)}.join
=> "f09f97bf"
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
- 全角カナ
- 半角カナ
- ㋐〜㋾ (!)
- ㌀〜㍗ (!!!)
- 𛀀(?)
- katakana letter archaic e (U+1B000)
- あ行のえを表した「衣」に由来する片仮名(http://www.akenotsuki.com/eyeben/fonts/)
などなど...
- 厳密にやりたいなら、下のように正規表現を使ってコードポイントの範囲指定をした方が良いと思う
UTF-8で4バイトになる文字が知りたい
正規表現で範囲指定すれば楽
"𠮷".match(/[\u{10000}-\u{10FFFF}]/)
=> #<MatchData "𠮷">
参考
Author And Source
この問題について(rubyでunicode, UTF8を扱うためのTips), 我々は、より多くの情報をここで見つけました https://qiita.com/kasei-san/items/fb9a6c8bdfafb2449b36著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .