2012-06-20 25 views
5

Trong PHP, bạn có thể chuyển đổi các ký tự 2 byte thành chiều rộng đơn với hàm mb_convert_kana. Họ gọi nó là "chuyển đổi zen-kaku thành han-kaku". Ví dụ, tôi có một chuỗi để chuyển đổi:Chuyển đổi văn bản tiếng Nhật có chiều rộng sang nửa chiều rộng (zen-kaku thành han-kaku)

dbl = "BOX" 

và tôi muốn tìm thấy một số phương pháp như thế này

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

Có cách nào để làm điều này trong Ruby?

Trả lời

0

hz_on_fly gem injects thay thế vào các mô hình AR, mà có lẽ không phải là những gì bạn muốn. Hãy xem unicode_japanese. Chỉ cần làm:

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

Ngã ba của dự án được cập nhật cho Ruby 1.9.2 (AFAIK khác không được). Để sử dụng nó, thêm video này vào Gemfile của bạn:

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

Vâng, nó không đẹp và nó chỉ hoạt động cho Romaji (có thể được mở rộng để đối phó với các nhân vật khác) nhưng nó làm việc cho tôi:

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

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

tôi sử dụng một sự kết hợp của Ruby built-in NKFString#tr

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

này có thêm lợi ích của transposing katakana nửa chiều rộng đầy đủ - với katakana.

0

Tôi nghĩ rằng Moji đá quý (Japanese documentation) sẽ rất thích hợp cho việc này, cũng là một viên ngọc tiếng Nhật rất hữu ích trong việc chung (chỉ hoạt động với Ruby 1.8 và 1.9):

require 'moji' 

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