普段日本語や英語を利用していると殆ど気にしないが、ヨーロッパの言語を中心に通常のアルファベットに様々な記号をつけた文字を利用しているところがある。ドイツ語のウムラウトやスペイン語・フランス語などの各種アクセントなどが有名だろう。
先程 Ruby でこのダイアクリティカルマークを削除する必要が出た。調べたところ、I18n gem を利用するのが手っ取り早いようだ。例えば irb 上であれば以下のように書けばちゃんと変換されているのがわかる。
> require "i18n"
=> true
> I18n.config.available_locales = :en
=> :en
> I18n.transliterate("Phnom Pénh")
=> "Phnom Penh"
gem を利用しない場合には以下のような感じで無理やり符号無しのアルファベットに置換する方法もある。
"Phnom Pénh".tr( "ÀÁÂÃÄÅàáâãäåĀāĂ㥹ÇçĆćĈĉĊċČčÐðĎďĐđÈÉÊËèéêëĒēĔĕĖėĘęĚěĜĝĞğĠġĢģĤĥĦħÌÍÎÏìíîïĨĩĪīĬĭĮįİıĴĵĶķĸĹĺĻļĽľĿŀŁłÑñŃńŅņŇňʼnŊŋÒÓÔÕÖØòóôõöøŌōŎŏŐőŔŕŖŗŘřŚśŜŝŞşŠšȘșſŢţŤťŦŧȚțÙÚÛÜù
úûüŨũŪūŬŭŮůŰűŲųŴŵÝýÿŶŷŸŹźŻżŽž", "AAAAAAaaaaaaAaAaAaCcCcCcCcCcDdDdDdEEEEeeeeEeEeEeEeEeGgGgGgGgHhHhIIIIiiiiIiIiIiIiIiJjKkkLlLlLlLlLlNnNnNnNnnNnOOOOOOooooooOoOoOoRrRrRrSsSsSsSsSssTtTtTtTtUUUUuuuuUuUuUuUuUuUuWwYyyYyYZzZzZz")
=> "Phnom Penh"
以下のページを参考にした。
utf 8 - Ruby method to remove accents from UTF-8 international characters - Stack Overflow
コメント