在PHP中,可以使用函数mb_convert_kana
将双宽字符转换为单宽度。他们称之为“将zen-kaku转换为han-kaku”。例如,我有一个要转换的字符串:
dbl = "BOX"
我想找到像这样的方法
dbl = "BOX".convert_to_half_width # dbl is now "BOX"
有没有办法在Ruby中做到这一点?
答案 0 :(得分:5)
我使用Ruby内置NKF
和String#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"