• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

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

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

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

原本用的方法是:

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)

 


 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Ruby 101:对象和方法发布时间:2022-07-14
下一篇:
Ruby语言学习系列--String类函数发布时间:2022-07-14
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap