• (转)ruby中日本文字的编码变换


     

    日本文字的编码变换

    在Ruby中,实现文字编码变换的库文件有nkf库文件和iconv库文件。

    ◆nkf库文件

    nkf库文件由NKF模块提供。NKF模块原是用于UNIX而制作的nkf(Network Kanji code conversion Filter)的过滤器指令,现在在Ruby中也用得到。

    在NKF模块中,通过指定文件编码,使用类似命令行选项的字符串。

    NKF.nkf(可选字符串, string)

    nkf的主要选项可参看下表。

    选项                    意义

    -d                 行文字中CR

    -c                 行文字中增加CR

    -x                 半角假名转换

    -m0                限制MIME

    -e                  出文字编码方式EUC-JP

    -s                  出文字编码方式Shift_JIS

    -j                  出文字编码方式ISO-2022-JP

    -w                 出文字编码方式UTF-8(BOM)

    -w8                出文字编码方式UTF-8(BOM)

    -w80               出文字编码方式UTF-8(BOM)

    -w16               出文字编码方式UTF-16(Big Endian/BOM)

    -w16B              出文字编码方式UTF-16(Big Endian/BOM)

    -w16B0             出文字编码方式UTF-16(Big Endian/BOM)

    -w16L              出文字编码方式UTF-16(Little Endian/BOM)

    -w16L0             出文字编码方式UTF-16(Little Endian/BOM)

    -E                  出文字编码方式EUC-JP

    -S                 出文字编码方式Shift_JIS

    -J                  出文字编码方式ISO-2022-JP

    -W                 出文字编码方式UTF-8(BOM)

    -W8                出文字编码方式UTF-8(BOM)

    -W80               出文字编码方式UTF-8(BOM)

    -W16               出文字编码方式UTF-16(Big Endian/BOM)

    -W16B              出文字编码方式UTF-16(Big Endian/BOM)

    -W16B0             出文字编码方式UTF-16(Big Endian/BOM)

    -W16L              出文字编码方式UTF-16(Little Endian/BOM)

    -W16L0             出文字编码方式UTF-16(Little Endian/BOM)

    为了规避半角到全角的转换,或者电子邮件特有字符串处理之类的错误,在简单文字编码场合,通常使用-x和-m0选项(也可以写作-xm0)。我们看下面的将文字编码从EUC-JP转换为UTF-8的场合。

    require "nkf"

    euc_str = "日本语EUC"

    utf8_str = NKF.nkf("-E –w –xm0", euc_str)

    如果预先没有指定输入文字的编码方式,NKF会自动判别其编码,具体的例子如下:

    require "nkf"

    euc_str = "日本语EUC文字列"

    utf8_str = NKF.nkf(" –w –xm0", euc_str)

    作为独立的库文件,nkf不依赖于操作系统,因此在Ruby的各种环境中都能使用nkf。

    ◆iconv库文件

    iconv库由iconv类提供。该库由系统平台提供,并用作文字编码的变换上。

    iconv不能进行输入文字的编码的自动判别,因此输入文字和输出文字的编码格式都需要预先指定。变换开始时,通过iconv.new方法生成变换器,然后在iconv里实施编码变换,最后返回变换的结果。变换器使用结束后需要用close方法关闭它。

    下面的例子是EUC-JP的字符串转换为UTF-8的例子,文字编码指定要遵循“输出编码,输入编码”的顺序。

    require "iconv"

    result = ""

    cd = Iconv.open("UTF-8", "EUC-JP")

    result << cd.iconv("あ")

    result << cd.iconv("い")

    result << cd.iconv("う")

    cd.close

    如果对File.open指定操作范围(注:{}中部分)的话,可以不需要close方法。

    require "iconv"

    result = ""

    Iconv.open("UTF-8", "EUC-JP"){|cd|

    result << cd.iconv("あ")

    result << cd.iconv("い")

    result << cd.iconv("う")

    }

    此外,可以不显式地生成变换器,直接使用Iconv.conv来完成编码变换。

    require "iconv"

    euc_str = "日本语EUC文字列"

    utf8_str = Iconv.conv("UTF-8", "EUC-JP", euc_str)

    iconv类功能与平台紧密相关,因此iconv库依赖于系统平台。也就是说,在不同的系统平台上,会出现同样的编码但名称不同的现象。还好,对于日语中文字编码来说,一般情况下电子邮件、Web一般采用“ISO-2022-JP”、“EUC-JP”、“SHIFT_JIS”、“UTF-8”的文字编码形式的场合要多一些。

    如果想知道iconv库能处理哪些文字编码,可以使用下面的命令查看。

    > iconv -l

  • 相关阅读:
    101与金根回顾敏捷个人:(93)《做最好的自己》之成功同心圆
    ArchiMate - 发布【企业架构语言ArchiMate v0.5.pdf】
    blog推荐 - 软件产品管理之Tyner Blain
    家庭创意:春节寻宝习俗
    流程 - 发布【敏捷方法之Scrum v0.2.pdf】
    个人管理 - 使用Scrum来敏捷自己
    blog推荐 - 电子图书与IT文档资料(ITPUB论坛)
    架构语言ArchiMate -应用层(Application Layer)
    架构语言ArchiMate - ArchiMate提供的基本视角(Viewpoints)介绍一
    故事:两只老虎的悲惨结局
  • 原文地址:https://www.cnblogs.com/guilin-hu/p/3360560.html
Copyright © 2020-2023  润新知