#定义一个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)
    

ruby Iconv.iconv编码方法的更多相关文章

  1. [ext/iconv/iconv.lo] Error 1

    办法1: wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.13.1.tar.gz tar -zxvf libiconv-1.13.1.tar.g ...

  2. cocos2dx使用了第三方库照样移植android平台-解决iconv库的移植问题

    当我写这篇文章的时候我是怀着激动的心情的,因为我又解决了一个技术问题.你可能对题目还一知半解,这是什么意思,我之所以要写这篇文章就是要解决当我们在cocos2dx中使用了第三方库的时候,移植到andr ...

  3. cocos2d_x iconv转码

    作者:何卫 转载请注明,原文链接:http://www.cnblogs.com/hewei2012/p/3374147.html iconv下载(Android) 源码下载地址,已编译完的iconv包 ...

  4. Cocos2d-x 对于中文的支持-----iconv库

    Cocos2d-x 对于中文的支持-----iconv库 转自:http://momowing.diandian.com/post/2013-01-16/40047183777 Jetion: 我们在 ...

  5. 移植到windows下的iconv

    This is a short memo about installing iconv on Windows host (specifically: Windows 7 SP1 x64). Iconv ...

  6. WDCP从php5.2升级到5.3的办法,以及升级过程中iconv错误的处理

    从wdcp官方论坛我们可以找到一个询问升级的帖子,然后管理员在回复中也提供了升级方法: cd /tmp wget -c http://dl.wdlinux.cn:5180/soft/php-5.3.1 ...

  7. 将iconv编译成lua接口

    前一篇博文说了.在cocos2dx中怎么样使用iconv转码,这节我们将上一节中写的转码函数,做成一个lua接口.在lua脚本中使用. 网上能够下载到luaconv.可是编译的时候总是报错,所以自己写 ...

  8. undefined reference to libiconv_open ext/iconv/.libs/iconv.o by install phpsource

    错误信息:ext/iconv/.libs/iconv.o(.text+0x30e2): In function `php_iconv_stream_filter_factory_create':/ho ...

  9. 使用iconv的包装类CharsetConverter进行编码转换的示例

    GitHub地址https://github.com/BuYishi/charset_converter_test charset_converter_test.cpp #include <io ...

随机推荐

  1. 【Lintcode】135.Combination Sum

    题目: Given a set of candidate numbers (C) and a target number (T), find all unique combinations in C  ...

  2. poj3177重修道路——边双连通分量缩点

    题目:http://poj.org/problem?id=3177 找桥,缩点,总之都是板子: 对于每个叶子,互相连一条边即可:若最后剩下一个,则去和根节点连边: 所以叶子节点数+1再/2即答案. 代 ...

  3. C# Json库 和 xml 序列化反序列化 存在的问题

    json 正常情况下不会对私有成员进行序列化和反序列化, 因此在用json做深拷贝时, 就会丢失数据. 解决办法:       声明成公有成员. json在序列化和反序列化时, 如果类中有IComma ...

  4. Poj_1088_滑雪(DP)

    一.Description(poj1088) Michael喜欢滑雪百这并不奇怪,  因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载 ...

  5. session.write类型引发的思考---Mina Session.write流程探索.doc--zhengli

    基于Mina开发网络通信程序,在传感器数据接入领域应用的很广泛,今天我无意中发现一个问题,那就是我在前端session.write(msg)数据出去之后,却没有经过Filter的Encoder方法,同 ...

  6. CSharp读取配置文件的类(简单实现)

    Reinventing the wheel 系列 CSharp 读取配置文件的类 简单实现(注意没有写) 本人对CS 不是很熟,库也不熟,所以到网上找个实现,并自己添加了点异常.如果只是读取信息,足够 ...

  7. HTTP缓存控制

    HTTP缓存控制总结   引言 通过网络获取内容既缓慢,成本又高.大的相应需要在客户端和服务器之间多次往返通信,这拖延了浏览器可以使用和处理内容的时间,同时也增加了通信的成本.因此,缓存和重用以前获取 ...

  8. 如何将ajax请求同步化

    (function ($) { var a = ['test1', 'test2', 'test3', 'test4']; recursive(3, 'test').done(function (re ...

  9. The type org.springframework.core.io.support.ResourcePatternResolver cannot be resolved. It is ind

    转自:https://blog.csdn.net/evilcry2012/article/details/49208909 缺包 spring-core-.RELEASE.jar

  10. Java日志:集成slf4j和logback

    Java日志方案有很多,包括:java.util.logging.Apache的commons-logging和log4j.slf4j以及logback. 一个大型项目会用到众多第三方jar包,这些j ...