zoukankan      html  css  js  c++  java
  • 关于RUBY处理多语言转字符编码的一点经验 nkf

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

    原本用的方法是:

    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)


  • 相关阅读:
    无线安全
    下载安装Emacs和基本配置--待更新中
    uv-pv-vv的区别
    tesseract安装及问题处理
    POJ 2187 Beauty Contest【凸包周长】
    POJ 1113 Wall【凸包周长】
    POJ 2187 Beauty Contest【旋转卡壳求凸包直径】
    POJ 2031 Building a Space Station【经典最小生成树】
    URAL 1181 Cutting a Painted Polygon【递归+分治】
    POJ 1845-Sumdiv【经典数学题目---求因子和】
  • 原文地址:https://www.cnblogs.com/zhualike/p/1705083.html
Copyright © 2011-2022 走看看