• (转)关于RUBY处理多语言转字符编码的一点经验 nkf


    本文出自http://www.cnblogs.com/zhualike/archive/2010/04/06/1705083.html,详情可以查看原文

    最近做了一个用户上传文件,然后在服务器端解析上传文件的功能,由于不知道用户上传文件的编码类型所以必须进行强制转换。

    原本用的方法是:

    Iconv.conv('utf-8' , 'cp932', string) 

    这样可以强制把 'cp932'的字符编码转换为'utf-8'。过了阵子出现某些上传文件开头部分出现莫名字符的问题。查了一下,如果输入的是有签名的UTF-8就会出错

    UTF-8签名(UTF-8 signature)也叫做BOM(Byte Order Mark),是UTF编码方案里用于标识编码的标准标记。如果多个文件设置了签名,在二进制流中就会包含多个UTF-8签名,而IE是无法识别多个UTF-8签名的,所以用一个空行来代替,在某些程序处理中还会出现一个类似“诺”的字符。 

     Iconv.conv只能将一种字符编码转换为另外一种,很不方便

    后来发现ruby后来又加入了一个叫NKF类,可以将任何其他编码转换为指定的编码格式,这样就能彻底解决我的问题。

    例:  string= NKF.nkf("-w", string)

     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)

  • 相关阅读:
    Android变化如何破解几场金
    mysql 在创建批处理脚本日志表信息
    近期感悟要多说多想多做
    Spring使用小结2
    structs2使用小结2
    2013第50周五打包
    2013第50周四开发记
    jquery使用总结
    2013第50周三开发记
    eclipse编辑工具小结
  • 原文地址:https://www.cnblogs.com/guilin-hu/p/3360552.html
Copyright © 2020-2023  润新知