濁点、半濁点の文字を取得
解決
def find_dakuon_and_handakuon(kana)
codepoints = kana.codepoints[0]
moji = codepoints.chr(Encoding::UTF_8)
dakuon = moji + "\u3099" # 濁点
handakuon = moji + "\u309a" # 半濁点
[
ActiveSupport::Multibyte::Unicode.normalize(dakuon, :c),
ActiveSupport::Multibyte::Unicode.normalize(handakuon, :c)
]
end
実行結果
find_dakuon_and_handakuon('ハ')
# => ["バ", "パ"]
find_dakuon_and_handakuon('セ')
# => ["ゼ", "セ゚"]
経緯
先頭のカタカナ一文字から銀行の支店名の検索するシステムで、濁点(バ)、半濁点(パ)の考慮されていなかった。 「ハ」で検索した際に、「バ」、「パ」で始まる支店名も検索したい。
調査
カタカナに濁点と半濁点をつける
Rubyで平仮名(ひらがな)と片仮名(カタカナ)に濁点と半濁点を付ける - Qiita
これで作成されるのは2文字である。 下記の問題が発生してしまう。
濁点の合成文字がソースコードに入っちまった💢 -> gitのpre-commit hookで打ち勝った · hoshinotsuyoshi.com - 自由なブログだよ
濁点アリの1文字「バ」、2文字「ハ」+「゛」、2文字「ハ」+「゙」
分離した2文字を一文字にする
Rubyで濁点/半濁点が分離した文字を1文字に統一するには - PIYO - Tech & Life -
より、下記メソッドを使用
ActiveSupport::Multibyte::Unicode.normalize