转自:http://hlee.iteye.com/blog/381650
Hooopo老大已经有一篇UTF8编码和正则表达式,所以,有看这篇需求的,上面的也可能用到。
正文:
在一些特别的需求下,我们需要放弃UTF-8的好处而转换格式到ASCII,通常在处理遗留系统的时候,会遇到这样的问题。那么,下面是解决的办法:
例如,想要把如下字符转换成ASCII
引用 çéß
转换成
引用 cess
实际上在MAC的系统上,我们可以简单的通过下面的脚本进行转换。
- s = "çéß"
- s = Iconv.iconv('ascii//translit', 'utf-8', s).to_s # returns "c'ess"
- s.gsub(/\W/, '') # return "cess"
实现很容易,效果也不错,可是,当要在Debian或者其他Linux系统下使用是,往往会遇到下面的invalid characters错误提示:
- Iconv::InvalidCharacter: "\351?"#错误提示
- from (irb):7:in `iconv'
- from (irb):7
- from (irb):6:in `collect'
- from (irb):6
- from :0
实际上,出现上面错误的原因是,MAC已经内置了unicode的支持,而Linux下没有。那么,我们需要的是首先,安装Unicode支持。
如下:
- sudo apt-get install unicode
这样就可以执行转换了。
那么,如果是需要转换一个句子呢,那么只要稍微的转换就可以达到目的:
- words = s.split(" ")
- words = words.collect do |word|
- word = Iconv.iconv('ascii//translit', 'utf-8', word).to_s
- word = word.gsub(/\W/,'')
- end
- words.join(" ")