Ruby 1.9 – 无效的多字节字符(US-ASCII)

我试图让我的轨道应用程序(2.3.5)运行在Ruby 1.9,我有这个函数,使一些string转换:

def replace_special_chars(downcase = true) if downcase string = self.downcase else string = self end string.gsub! /á|ã|à|ä|â/, 'a' string.gsub! /é|è|ë|ê/, 'e' string.gsub! /í|ì|ï|î/, 'i' string.gsub! /ó|õ|ò|ô|ö/, 'o' string.gsub! /ú|ù|ü|û/, 'u' string.gsub! /ç/, 'c' string.gsub! /&/, 'e' string.gsub! /\s/, '-' string.gsub! /[^a-zA-Z_0-9-]/, '' string.gsub! /-(-)+/, '-' string end 

但是,当我尝试启动服务器,我得到这个错误:

 <internal:lib/rubygems/custom_require>:29:in `require': /Users/.../lib/nzn_string.rb:11: invalid multibyte char (US-ASCII) (SyntaxError) /Users/.../lib/nzn_string.rb:11: invalid multibyte char (US-ASCII) /Users/.../lib/nzn_string.rb:11: syntax error, unexpected $end, expecting keyword_end string.gsub! /á|ã|à|ä|â/, 'a' ^ 

从:29:在“要求”

什么是正确的方式来做这个ruby1.9? 我不知道我在这里错过了什么

在该文件的顶部写入# encoding: utf-8 。 这将更改该文件utf-8中所有string/正则expression式字面值的默认编码。 所有文字的默认编码是US-ASCII ,不能表示á

为了使它在整个项目中,尝试: magic_encodinggem。

我认为你也可以将regexps从语法/ re /改成语法(Regexp.new're',nil,'n')

例如,您提到的说明:

string.gsub! /á|ã|à|ä|â/,'a'

会变成:

string.gsub! (Regexp.new'á|à|ä|',nil,'n'),'a'

更多细节在这里:

http://www.ruby-forum.com/topic/183413