Подтвердить что ты не робот

Ruby 1.9 - недействительный мультибайт char (US-ASCII)

Я пытаюсь запустить приложение 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: в `require '

Какой правильный способ сделать это на ruby ​​1.9? Я не знаю, что здесь отсутствует.

4b9b3361

Ответ 1

Напишите # encoding: utf-8 поверх этого файла. Это изменяет кодировку по умолчанию для всех литералов string/regexp в этом файле utf-8. Кодировка по умолчанию для всех литералов US-ASCII, которая не может представлять á.

Ответ 2

Чтобы сделать его по всему проекту, попробуйте magic_encoding gem.

Ответ 3

Я думаю, вы также можете изменить регулярные выражения из синтаксиса/re/для синтаксиса (Regexp.new 're', nil, 'n')

Например, указанная инструкция:

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

станет:

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

Подробнее здесь:

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