2012-06-20 17 views
5

W języku PHP można konwertować znaki o podwójnej szerokości do pojedynczej szerokości za pomocą funkcji mb_convert_kana. Nazywają to "konwersją zen-kaku na han-kaku". Na przykład, mam ciąg do zamiany:Konwersja tekstu japońskiego na pełnej szerokości na połowę szerokości (zen-kaku na han-kaku)

dbl = "BOX" 

i chciałbym znaleźć jakiś sposób jak to

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

Czy istnieje sposób, aby zrobić to w Ruby?

Odpowiedz

0

hz_on_fly gem wstrzykuje zamienniki do modeli AR, co prawdopodobnie nie jest tym, czego potrzebujesz. Spójrz na unicode_japanese. Po prostu wykonaj:

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

Moje rozwidlenie projektu jest aktualizowane dla Ruby 1.9.2 (inne nie są AFAIK). Aby z niego skorzystać, należy dodać to do Gemfile:

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

Cóż, to nie jest ładna i to działa tylko dla Romaji (może być przedłużony do czynienia z innymi postaciami), ale pracował dla mnie:

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

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

używam kombinacji Ruby wbudowany NKF i String#tr

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

Ma to dodatkową zaletę transpozycji połowa szerokości katakana do pełna - również z katakaną.

0

myślę Moji gem (Japanese documentation) byłoby dobrze nadaje się do tego, jak dobrze jest to bardzo przydatna język japoński skarb w ogóle (działa z Ruby 1.8 i 1.9):

require 'moji' 

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