【问题标题】:Ruby 1.9 - invalid multibyte char (US-ASCII)Ruby 1.9 - 无效的多字节字符(US-ASCII)
【发布时间】:2011-04-10 08:11:25
【问题描述】:

我试图让我的 rails 应用程序 (2.3.5) 在 Ruby 1.9 上运行,我有这个函数可以对字符串进行一些转换:

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:in `require'

在 ruby​​ 1.9 上执行此操作的正确方法是什么? 我不知道我在这里缺少什么

【问题讨论】:

标签: ruby ruby-on-rails-3 ascii


【解决方案1】:

在该文件顶部写入# encoding: utf-8。这会更改该文件utf-8 中所有字符串/正则表达式文字的默认编码。所有字面量的默认编码都是US-ASCII,不能代表á。

【讨论】:

  • 嘿。那行得通,谢谢。有没有办法让这个项目更广泛?
  • @Tiago:是的:将该行添加到项目中的所有文件中。
  • 如果目标脚本独立运行,编码行倒数第二个:#!/usr/bin/env ruby# encoding: utf-8require 'abc'...
【解决方案2】:

要使其适用于项目范围,请尝试:magic_encoding gem。

【讨论】:

    【解决方案3】:

    我认为您也可以将正则表达式从语法 /re/ 更改为语法 (Regexp.new 're', nil, 'n')

    比如你提到的指令:

    字符串.gsub! /á|ã|à|ä|â/, 'a'

    会变成:

    字符串.gsub! (Regexp.new 'á|ã|à|ä|â', nil, 'n'), 'a'

    更多细节在这里:

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

    【讨论】:

      猜你喜欢
      • 2010-12-16
      • 1970-01-01
      • 1970-01-01
      • 2011-04-24
      • 1970-01-01
      • 1970-01-01
      • 2011-07-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多