#定义一个UTF-8=>GBK的方法
def encoding inStr
    Iconv.iconv("GBK","UTF-8",inStr)
end
#定义一个GBK=>UTF-8的方法
def unencoding inStr
    Iconv.iconv("UTF-8","GBK",inStr).join
end

学习参考:http://www.kuqin.com/rubycndocument/man/addlib/Iconv.html#Iconv.2eiconv

Iconv 类

类方法

Iconv.new(to, from)

生成并返回从fromto的新的转换器。

tofrom分别指变换后和变换前的字符代码体系。

该方法中可能出现的异常如下。

tofrom不是String时,将引发TypeError

若找不到tofrom所指的变换器时,则引发ArgumentError

iconv_open(3)运行失败,则引发SystemCallError

Iconv.open(to, from) {|cd| ...}

若没给块时,它相当于Iconv.new。若给块的话,将计算块的内容,关闭转换器,并返回块的计算值。

Iconv.iconv(to, from, *strs)

它是下列语句

Iconv.open(to, from) {|cd| (strs + [nil]).collect {|s| cd.iconv(s)}}

的省略形式。其中tofrom的意义与Iconv.new中的相同。

strs是被变换的字符串。

该方法可能会引起Iconv.new, Iconv.open 以及 Iconv#iconv 中的异常。

Iconv.conv(to, from, str)

它是下列语句

Iconv.iconv(to, from, str).join

的省略形式。请参考Iconv.iconv

Iconv.list {|*aliases| ... } ((<ruby 1.9 特性>))

Iterates each alias sets. 若未指定块,则返回编码名列表。

实例方法

Iconv#close

结束转换。

若调用该方法之后再调用Iconv#iconv的话,就会引发异常。但若只调用close本身的话则没问题。

它的返回值是可以使输出缓冲区恢复到初始shift状态的字节串。

i = Iconv.open("ISO-2022-JP", "EUC-JP")
i.iconv("\264\301") #=> "\e$B4A"
i.iconv("\273\372") #=> ";z"
i.close #=> "\e(B"
Iconv#iconv(str, [ start = 0, [ length = -1 ] ])

开始转换字符串,并返回转换结果。

str是字符串,则进行str[start, length]转换,并返回转换结果。

strnil,则将转换器恢复到初始shift状态,并返回可将输出缓冲区恢复为初始shift状态的字节串。

除此以外将引发异常。

str是转换后的字符串或nil

startstr中的转换起始点。

lengthstr中的转换长度。若为nil-1的话,则指转换start后面的所有字符。

该方法可能会引发Iconv::IllegalSequenceIconv::InvalidCharacter、以及 Iconv::OutOfRange 异常。

Iconv::Failure 模块

Iconv可能引发的异常而设置的模块。

实例方法

Iconv::Failure#success

返回发生异常前转换成功的字符串。

Iconv.iconv 中发生该异常时的返回值是,由发生异常前转换成功的字符串所构成的数组。数组的最后一个元素就是变换中的字符串。

Iconv::Failure#failed

它返回传给Iconv的字符串中的异常发生点之后部分。

Iconv::Failure#inspect

返回形如#<type: "success", "failed">这样的字符串。

Iconv::IllegalSequence 类

它表示,因为输出或输入的字符不在指定的字符集合内,所以停止转换。

超类

ArgumentError

包含的模块

Iconv::Failure

Iconv::InvalidCharacter 类

它表示,因为输入的末尾部分是不完整的字符或shift,所以停止转换。

超类

ArgumentError

包含的类

Iconv::Failure

Iconv::OutOfRange 类

Iconv库的内部错误。通常不会引发该异常。

超类

RuntimeError

包含的模块

Iconv::Failure

  1. 新生成Iconv的实例,并使用Iconv#iconv方法

    cd = Iconv.new(to, from)
    begin
    input.each {|s| output << cd.iconv(s)}
    output << cd.iconv(nil) # don't forget this
    ensure
    cd.close
    end
  2. 带块调用Iconv.open

    Iconv.open(to, from) do |cd|
    input.each {|s| output << cd.iconv(s)}
    output << cd.iconv(nil)
    end
  3. (2) 的简略形式

    Iconv.iconv(to, from, *input.to_a)
    

最新文章

  1. js/jquery判断浏览器的方法小结
  2. 信号通讯编程,王明学learn
  3. Gitub
  4. [CF353C]Find Maximum(贪心)
  5. 1.C#基础篇--&gt;封装、继承和多态
  6. hdu4864 hdu4268 贪心 lower_bound
  7. 【NHibernate】配置- sql打印
  8. ACM YTU 《挑战编程》第一章 入门 Problem E: Graphical Editor
  9. SHDP--Working With HBase (二)之HBase JDBC驱动Phoenix与SpringJDBCTemplate的集成
  10. 主机和VMware中的Linux如实现共享文件夹
  11. ConcurrentHashMap、synchronized与线程安全
  12. WPF 系统关闭模式
  13. spring自带测试配置
  14. Unicode与UTF-8关系
  15. C#后台执行js
  16. Match 3 小项目学习
  17. 一个支持邮件带附件群发的java类
  18. ViewPager自定义选项卡
  19. vs web项目远程发布到IIS
  20. CF954F Runner&#39;s Problem

热门文章

  1. 作业2nd
  2. Spring笔记01(基础知识)
  3. RPM包构建
  4. 【Matlab】常用函数
  5. [allmake] -- 交叉编译原来如此简单
  6. 第3章 编写ROS程序-3
  7. HashMap为什么是线程不安全的
  8. Laravel中使用Session存取验证码信息
  9. MVC 中dapper的日志功能+程序报错修改
  10. aimOffset注意事项