zoukankan      html  css  js  c++  java
  • ruby Iconv.iconv编码方法

    #定义一个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("264301")     #=> "e$B4A"
    i.iconv("273372")     #=> ";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)
      
  • 相关阅读:
    【BZOJ1002】【FJOI2007】轮状病毒(生成树计数)
    【BZOJ1003】【ZJOI2006】物流运输
    【BZOJ1001】狼抓兔子
    【对noip结束后一个月内的总结】
    floyd原理以及求最小环
    三角形面积求法
    6、task,线程和executor间的关系
    [leetcode]Valid Sudoku
    [leetcode]Search Insert Position
    rand5()产生rand7()
  • 原文地址:https://www.cnblogs.com/dami520/p/3227293.html
Copyright © 2011-2022 走看看