使用Iconv将UTF-8转换成ASCII(on Linux)

6 篇文章 0 订阅

转自:http://hlee.iteye.com/blog/381650


Hooopo老大已经有一篇UTF8编码和正则表达式,所以,有看这篇需求的,上面的也可能用到。 


正文: 

    在一些特别的需求下,我们需要放弃UTF-8的好处而转换格式到ASCII,通常在处理遗留系统的时候,会遇到这样的问题。那么,下面是解决的办法: 

例如,想要把如下字符转换成ASCII 
引用
çéß


转换成 
引用
cess

实际上在MAC的系统上,我们可以简单的通过下面的脚本进行转换。 
Ruby代码   收藏代码
  1. s = "çéß"  
  2. s = Iconv.iconv('ascii//translit''utf-8', s).to_s # returns "c'ess"  
  3. s.gsub(/\W/, ''# return "cess"  

   
     实现很容易,效果也不错,可是,当要在Debian或者其他Linux系统下使用是,往往会遇到下面的invalid characters错误提示: 
Ruby代码   收藏代码
  1. Iconv::InvalidCharacter: "\351?"#错误提示  
  2.         from (irb):7:in `iconv'  
  3.         from (irb):7  
  4.         from (irb):6:in `collect'  
  5.         from (irb):6  
  6.         from :0  

实际上,出现上面错误的原因是,MAC已经内置了unicode的支持,而Linux下没有。那么,我们需要的是首先,安装Unicode支持。 
如下: 
Java代码   收藏代码
  1. sudo apt-get install unicode  


这样就可以执行转换了。 


那么,如果是需要转换一个句子呢,那么只要稍微的转换就可以达到目的: 
Ruby代码   收藏代码
  1. words = s.split(" ")  
  2. words = words.collect do |word|  
  3.     word = Iconv.iconv('ascii//translit''utf-8', word).to_s  
  4.     word = word.gsub(/\W/,'')  
  5. end  
  6. words.join(" ")  
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值