web-dev-qa-db-fra.com

Ruby 1.9 - caractère multi-octets invalide (US-ASCII)

Im essayant de faire mon Rails application (2.3.5) pour fonctionner sur Ruby 1.9, j'ai cette fonction qui fait des transformations sur une chaîne:

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

Mais lorsque j'essaie de démarrer le serveur, j'ai eu cette erreur:

<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'
                ^

à partir de: 29: dans `exiger '

Quelle est la bonne façon de le faire sur Ruby 1.9? Je ne sais pas ce que je manque ici

46
Tiago

Écrire # encoding: utf-8 au-dessus de ce fichier. Cela modifie l'encodage par défaut de tous les littéraux chaîne/expression régulière dans ce fichier utf-8. L'encodage par défaut pour tous les littéraux est US-ASCII, qui ne peut pas représenter á.

122
Reactormonk

Pour le faire à l'échelle du projet, essayez: la gemme magic_encoding .

3
ohho

Je pense que vous pouvez également changer les expressions rationnelles de la syntaxe/re/à la syntaxe (Regexp.new 're', nil, 'n')

Par exemple, l'instruction que vous avez mentionnée:

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

va devenir:

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

Plus de détails ici:

http://www.Ruby-forum.com/topic/18341

0
Carlos Saltos