Ruby 1.9 – caractère multibyte invalide (US-ASCII)

J’essaie de faire fonctionner mon application de rails (2.3.5) sur Ruby 1.9, j’ai cette fonction qui fait des transformations sur une chaîne:

def replace_special_chars(downcase = true) if downcase ssortingng = self.downcase else ssortingng = self end ssortingng.gsub! /á|ã|à|ä|â/, 'a' ssortingng.gsub! /é|è|ë|ê/, 'e' ssortingng.gsub! /í|ì|ï|î/, 'i' ssortingng.gsub! /ó|õ|ò|ô|ö/, 'o' ssortingng.gsub! /ú|ù|ü|û/, 'u' ssortingng.gsub! /ç/, 'c' ssortingng.gsub! /&/, 'e' ssortingng.gsub! /\s/, '-' ssortingng.gsub! /[^a-zA-Z_0-9-]/, '' ssortingng.gsub! /-(-)+/, '-' ssortingng end 

Mais quand j’essaie de démarrer le serveur, j’ai cette erreur:

 :29:in `require': /Users/.../lib/nzn_ssortingng.rb:11: invalid multibyte char (US-ASCII) (SyntaxError) /Users/.../lib/nzn_ssortingng.rb:11: invalid multibyte char (US-ASCII) /Users/.../lib/nzn_ssortingng.rb:11: syntax error, unexpected $end, expecting keyword_end ssortingng.gsub! /á|ã|à|ä|â/, 'a' ^ 

à partir de: 29: dans `require ‘

Quelle est la bonne façon de faire cela sur Ruby 1.9? Je ne sais pas ce qui manque

Write # encoding: utf-8 en haut de ce fichier. Cela modifie l’encodage par défaut de tous les littéraux ssortingng / regexp dans ce fichier utf-8 . Le codage par défaut pour tous les littéraux est US-ASCII , qui ne peut pas représenter á .

Pour le rendre à l’échelle du projet, essayez: la gemme magic_encoding .

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:

ssortingng.gsub! / á | ã | à | ä | â /, ‘a’

va devenir:

ssortingng.gsub! (Regexp.new ‘á | ã | à | ä | â, nil,’ n ‘),’ a ‘

Plus de détails ici:

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