【问题标题】:Convert full-width Japanese text to half-width (zen-kaku to han-kaku)将全角日文文本转换为半角(zen-kaku 到 han-kaku)
【发布时间】:2020-03-17 12:48:25
【问题描述】:

在 PHP 中,可以使用函数 mb_convert_kana 将双角字符转换为单角字符。他们称其为“将禅格转化为韩格”。例如,我有一个字符串要转换:

dbl = "BOX"

我想找一些这样的方法

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

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

【问题讨论】:

    标签: ruby text unicode cjk


    【解决方案1】:

    我使用 Ruby 内置 NKFString#tr 的组合

    require 'nkf'
    dbl = "BOXカタカナ"
    dbl = NKF.nkf('-X -w', dbl).tr('0-9a-zA-Z', '0-9a-zA-Z')
    # dbl now is "BOXカタカナ"
    

    这还具有将半角片假名转换为全角片假名的额外好处。

    【讨论】:

    • 它对我不起作用。 NKF.nkf('-X -w', "カタカナ") => "カタカナ"
    • @KaranBamniya 这个答案将全角 0-9、a-z、A-Z 转换为半角 ASCII 字符,同时将 half-width 片假名转换为 full-width 片假名。如果要将全角片假名转换为半角,请使用NKF.nkf('-Z4w', 'カタカナ') => "カタカナ"
    【解决方案2】:

    嗯,它不漂亮,它只适用于罗马字(可以扩展到处理其他字符)但它对我有用:

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

    【讨论】:

    • 我需要将一半转换为完整,似乎 nkf 无法做到这一点。所以这真的很有帮助。
    【解决方案3】:

    有一个宝石:hz_on_fly

    【讨论】:

      【解决方案4】:

      我认为Moji gem (Japanese documentation) 非常适合这种情况,一般来说,它也是一个非常有用的日语 gem(适用于 Ruby 1.8 和 1.9):

      require 'moji'
      
      dbl = Moji.zen_to_han("BOX")
      # => "BOX"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-12
        相关资源
        最近更新 更多