将全角日文文本转换为半角(zen-kaku到han-kaku)

时间:2012-06-20 10:50:44

标签: ruby text unicode cjk

在PHP中,可以使用函数mb_convert_kana将双宽字符转换为单宽度。他们称之为“将zen-kaku转换为han-kaku”。例如,我有一个要转换的字符串:

dbl = "BOX"

我想找到像这样的方法

dbl = "BOX".convert_to_half_width # dbl is now "BOX"

有没有办法在Ruby中做到这一点?

5 个答案:

答案 0 :(得分:5)

我使用Ruby内置NKFString#tr

的组合
require 'nkf'
dbl = "BOX"
dbl = NKF.nkf('-X -w', dbl).tr('0-9a-zA-Z', '0-9a-zA-Z')

这样做的另一个好处是可以将半角片假名翻译成全套片假名片。

答案 1 :(得分:0)

有一个宝石:hz_on_fly

答案 2 :(得分:0)

嗯,它不漂亮,它只适用于Romaji(可以扩展到处理其他角色)但它对我有用:

title = "BOX"
englishReplacements = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"
japaneseReplacements = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"

converted = title.tr(japaneseReplacements, englishReplacements) 
# title is now "BOX"

答案 3 :(得分:0)

hz_on_fly gem将替换注入AR模型,这可能不是你想要的。看看unicode_japanese。只是做:

Unicode::Japanese.z2h("BOX")
  # => "BOX"

项目的fork已更新为Ruby 1.9.2(AFAIK其他人不是)。要使用它,请将其添加到您的Gemfile:

gem 'unicode_japanese',
  :git => 'git://github.com/jpgeek/unicode_japanese.git'

答案 4 :(得分:0)

我认为Moji gem(Japanese documentation)非常适合这一点,并且一般来说是一个非常有用的日语宝石(适用于Ruby 1.8和1.9):

require 'moji'

dbl = Moji.zen_to_han("BOX")
# => "BOX"