博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ruby Iconv.iconv编码方法
阅读量:4342 次
发布时间:2019-06-07

本文共 2170 字,大约阅读时间需要 7 分钟。

#定义一个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.iconv(to, from, *strs)

它是下列语句

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

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

strs是被变换的字符串。

该方法可能会引起, 以及 中的异常。

Iconv.conv(to, from, str)

它是下列语句

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

的省略形式。请参考。

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

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

实例方法

Iconv#close

结束转换。

若调用该方法之后再调用的话,就会引发异常。但若只调用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::Failure 模块

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

实例方法

Iconv::Failure#success

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

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

Iconv::Failure#failed

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

Iconv::Failure#inspect

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

Iconv::IllegalSequence 类

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

超类

ArgumentError

包含的模块

Iconv::InvalidCharacter 类

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

超类

ArgumentError

包含的类

Iconv::OutOfRange 类

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

超类

RuntimeError

包含的模块

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

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

    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)

 

转载于:https://www.cnblogs.com/dami520/p/3227293.html

你可能感兴趣的文章
sd卡的操作
查看>>
mui-当使用addeleventlisener()方法绑定事件时选择器无法绑定事件
查看>>
javascript 中的var : 隐含变量 全局变量 变量提升
查看>>
阿里巴巴Json工具-Fastjson讲解
查看>>
POJ 2376 (区间问题,贪心)
查看>>
SageCRM的学习资料
查看>>
Xtreme8.0 - Kabloom 动态规划
查看>>
Wing IDE 4.1使用笔记一修正一下框框字体显示不了中文
查看>>
【译】x86程序员手册26-7.5任务切换
查看>>
JS中null与undefined的区别
查看>>
有趣的程序
查看>>
牛客练习赛23 F 托米的游戏
查看>>
静态方法与非静态方法区别
查看>>
第四篇 枚举思想
查看>>
KJBitmap与KJHttp的深度用法
查看>>
HDOJ 1166 敌兵布阵 (线段树)
查看>>
[转]拥抱HTML5,《HTML5设计原理》读后随记
查看>>
28继承,委托,重写--[Asp.Net]
查看>>
Cloudera Manager5安装总结遇到问题及解决办法 CDH 5.8 on CentOS 7
查看>>
浅入深出Vue:数据绑定
查看>>