Ruby 将全宽日语文本转换为半宽(zen kaku到han kaku)

Ruby 将全宽日语文本转换为半宽(zen kaku到han kaku),ruby,text,unicode,cjk,Ruby,Text,Unicode,Cjk,在PHP中,可以使用函数mb\u convert\u kana将双宽字符转换为单宽字符。他们称之为“将禅宗卡库转化为汉卡库”。例如,我有一个字符串要转换: dbl = "BOX" 我想找到这样的方法 dbl = "BOX".convert_to_half_width # dbl is now "BOX" 在Ruby中有什么方法可以做到这一点吗?有一个很好的方法:好吧,它不漂亮,只对Romaji有效(可以扩展到处理其他字符),但对我有效: title = "BOX" englishReplac

在PHP中,可以使用函数
mb\u convert\u kana
将双宽字符转换为单宽字符。他们称之为“将禅宗卡库转化为汉卡库”。例如,我有一个字符串要转换:

dbl = "BOX"
我想找到这样的方法

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

在Ruby中有什么方法可以做到这一点吗?

有一个很好的方法:

好吧,它不漂亮,只对Romaji有效(可以扩展到处理其他字符),但对我有效:

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

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

我使用Ruby内置的
NKF
String#tr

需要“nkf”
dbl=”BOXカタカナ"
dbl=NKF.NKF('-X-w',dbl).tr('0-9a-zA-Z', '0-9a-zA-Z')
#dbl现在是“盒子”カタカナ"
这还有一个额外的好处,就是将半宽片假名转换为全宽片假名。

我认为gem()非常适合这种情况,并且通常是非常有用的日语gem(适用于Ruby 1.8和1.9):


我需要将一半转换为完全,而nkf似乎无法做到这一点。因此这确实有帮助。它对我不起作用。nkf.nkf('-X-w',”カタカナ") => "カタカナ“@KaranBamniya此答案将全宽0-9、a-z、a-z转换为半宽ASCII字符,同时将半宽片假名转换为全宽片假名。如果要将全宽片假名转换为半宽片假名,请使用
NKF.NKF('-Z4w','カタカナ') => "カタカナ"
require 'moji'

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