Post

濁点、半濁点の文字を取得

解決

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

This post is licensed under CC BY 4.0 by the author.