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)
-
生成并返回从from到to的新的转换器。
to和from分别指变换后和变换前的字符代码体系。
该方法中可能出现的异常如下。
若to或from不是String时,将引发
TypeError
。若找不到to和from所指的变换器时,则引发
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)}}
的省略形式。其中to和from的意义与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]
转换,并返回转换结果。若str为
nil
,则将转换器恢复到初始shift状态,并返回可将输出缓冲区恢复为初始shift状态的字节串。除此以外将引发异常。
str是转换后的字符串或
nil
。start是str中的转换起始点。
length是str中的转换长度。若为
nil
或-1
的话,则指转换start
后面的所有字符。该方法可能会引发Iconv::IllegalSequence、 Iconv::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::InvalidCharacter 类
它表示,因为输入的末尾部分是不完整的字符或shift,所以停止转换。
超类
ArgumentError
包含的类
Iconv::OutOfRange 类
Iconv库的内部错误。通常不会引发该异常。
超类
RuntimeError
包含的模块
例
-
新生成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
-
带块调用Iconv.open
Iconv.open(to, from) do |cd| input.each {|s| output << cd.iconv(s)} output << cd.iconv(nil) end
-
(2) 的简略形式
Iconv.iconv(to, from, *input.to_a)