UTF-8的gsub编码问题

时间:2013-07-09 09:24:33

标签: ruby encoding gsub

我正在尝试从数据库迁移中的某些用户名创建一个slug。

nick = nick.gsub('á','a')

我真的希望将éíóúñ改为eioun

这样做,它不起作用,我会得到:

  

不兼容的编码regexp匹配(UTF-8 regexp与ASCII-8BIT字符串)(Encoding :: CompatibilityError)

但是,不过我这样做,例如通过添加force_encoding方法,我总是得到编码错误,如:

  

UTF-8中无效的字节序列(ArgumentError)

     

“\ xF3”从ASCII-8BIT到UTF-8(编码:: UndefinedConversionError)

     

不兼容的字符编码:ASCII-8BIT和UTF-8(Encoding :: CompatibilityError)

当我有一个改变那些人声或西班牙语字母的gsub时,就会发生这种情况。

我的文件上还有encoding: utf-8行,数据来自UTF-8数据库。但似乎没有任何帮助。

我在SO上看过一些问题,但我尝试做的任何事情都没有解决它。

顺便说一句,这与轨道无关。

1 个答案:

答案 0 :(得分:1)

我最终使用了来自Rails ActiveSupport的音译

require 'active_support/all'
v = ActiveSupport::Inflector.transliterate v.downcase
v.gsub(/[^a-z1-9]+/, '-').chomp('-')

工作正常。