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)


  • 相关阅读:
    Linux 下的类似Windows下Everything的搜索工具
    windows和linux环境下制作U盘启动盘
    程序调试手段之gdb, vxworks shell
    LeetCode 1021. Remove Outermost Parentheses (删除最外层的括号)
    LeetCode 1047. Remove All Adjacent Duplicates In String (删除字符串中的所有相邻重复项)
    LeetCode 844. Backspace String Compare (比较含退格的字符串)
    LeetCode 860. Lemonade Change (柠檬水找零)
    LeetCode 1221. Split a String in Balanced Strings (分割平衡字符串)
    LeetCode 1046. Last Stone Weight (最后一块石头的重量 )
    LeetCode 746. Min Cost Climbing Stairs (使用最小花费爬楼梯)
  • 原文地址:https://www.cnblogs.com/zhualike/p/1705083.html
Copyright © 2011-2022 走看看