はじめに
プログラミングをしていると,この文字のコードポイントは何だろう?とか,Unicode カテゴリーは何だろう?ということがよくある。
これをさくっと知るには,Unicode の文字情報が詰まった以下のような gem を使うといい1。
- unicode-name(Unicode 文字名)
- unicode-categories(Unicode カテゴリー)
- unicode-blocks(Unicode ブロック)
- unicode-scripts(Unicode スクリプト〔用字系〕)
- unicode-types(unicode ベーシックタイプ)
2021-04-20 追記
コードと実行例を修正し,表示を改善した。改善点は以下のとおり
- Unicode 名を得るのに
Unicode::Name.of
でなくUnicode::Name.readable
を使った。- これにより,制御コードにも名前が表示されるようになった。
- 文字見本に
" "
を付けた - 制御文字の場合の文字見本を目で見て分かるようにした。
- Unicode ブロック名のあとにブロックのコードポイントの範囲を表示した。
- Unicode ブロックのところに Unicode Consortium サイトの当該ブロックの URL を表示した。
※このような表示の改善に関するご提案があればコメントでお願いします。
irb 上で
irb 上で文字情報をさくっと知りたいなら,~/.irbrc
に
require "bundler/inline"
gemfile do
%w(name categories blocks scripts types).each do
gem "unicode-" + _1
end
end
def unicode_info(str)
u = "U+%04X".method(:%)
str.each_char do |ch|
codepoint = u[ch.ord]
name = Unicode::Name.readable(ch)
category_long = Unicode::Categories.category(ch, format: :long)
category_short = Unicode::Categories.category(ch)
script = Unicode::Scripts.script(ch)
block = Unicode::Blocks.block(ch)
block_s, block_e = Unicode::Blocks::INDEX.find{ _3 == block }.then{ [u[_1], u[_2]] }
type = Unicode::Types.type(ch)
label = (category_short == "Cc") ? ch.inspect : %("#{ ch }")
puts <<~EOT
#{ label }
codepoint: #{ codepoint }
name: #{ name }
category: #{ category_long } (#{ category_short })
script: #{ script }
block: #{ block } (#{ block_s }-#{ block_e })
https://www.unicode.org/charts/PDF/U#{ block_s[2..-1] }.pdf
type: #{ type }
EOT
end
end
とでも書いておこう。
こうしておくと,irb で
irb(main):001:0> unicode_info "𩸽の味!"
"𩸽"
codepoint: U+29E3D
name: CJK UNIFIED IDEOGRAPH-29E3D
category: Other_Letter (Lo)
script: Han
block: CJK Unified Ideographs Extension B (U+20000-U+2A6DF)
https://www.unicode.org/charts/PDF/U20000.pdf
type: Graphic
"の"
codepoint: U+306E
name: HIRAGANA LETTER NO
category: Other_Letter (Lo)
script: Hiragana
block: Hiragana (U+3040-U+309F)
https://www.unicode.org/charts/PDF/U3040.pdf
type: Graphic
"味"
codepoint: U+5473
name: CJK UNIFIED IDEOGRAPH-5473
category: Other_Letter (Lo)
script: Han
block: CJK Unified Ideographs (U+4E00-U+9FFF)
https://www.unicode.org/charts/PDF/U4E00.pdf
type: Graphic
"!"
codepoint: U+FF01
name: FULLWIDTH EXCLAMATION MARK
category: Other_Punctuation (Po)
script: Common
block: Halfwidth and Fullwidth Forms (U+FF00-U+FFEF)
https://www.unicode.org/charts/PDF/UFF00.pdf
type: Graphic
=> "𩸽の味!"
と使える。
もちろん事前に
gem install unicode-name unicode-categories unicode-blocks unicode-scripts unicode-types
として必要な gem をインストールしておく必要がある。
pry なんですけど?
irb じゃなくて pry 使ってる人は ~/.irbrc
でなく ~/.pryrc
に書けばいい。
~/.irbrc
って何?
Windows の人は「~/.irbrc
ってなんじゃらほい?」と思うかもしれないが,これは「現在のユーザーのユーザーディレクトリー直下にある .irbrc
というファイル」のこと。
ユーザーディレクトリーというのは,C:¥Users
の直下にあるユーザーごとのディレクトリー。
コードの補足説明
たぶん,
require "bundler/inline"
gemfile do
source "https://rubygems.org"
%w(name categories blocks scripts types).each do
gem "unicode-" + _1
end
end
は見慣れない人が多いと思う。
ふつう,gem を使うプロジェクトは必要とする gem の指定を Gemfile に書くが,それをスクリプトファイルのほうに書きたいとき,gemfile
メソッドを使う。このメソッドを使うためには bundler/inline
を require する。
_1
は番号指定ブロックパラメーターなので,Ruby 2.7 以降を前提としている。それより前の Ruby バージョンなら真面目にブロックパラメーターを書けばよい。