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? 我不知道我在这里错过了什么

3 Solutions collect form web for “Ruby 1.9 – 无效的多字节字符(US-ASCII)”

在该文件的顶部写入# 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

  • Rails 3跳过validation和callback
  • 在Ruby on Rails中重写setter方法的正确方法是什么?
  • Rails数据库迁移 - 如何删除表?
  • 在Rails 3中设置一个Gmail账户来处理ActionMailer
  • 在Rails的has_many关系中默认使用一个范围
  • 如何保持一个checkbox和标签在Rails窗体中的同一行?
  • 骨干model.destroy()调用错误callback函数,即使它工作正常?
  • 在Rails 3中将“当前”类添加到nav的最佳方法
  • 在Rspectesting中运行Rake任务
  • 从已经在数据库中的数据创build种子文件
  • 如何使用Capybara查询string获取当前path