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'
更多细节在这里: