46 votes

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

J'essaie de faire en sorte que mon application rails (2.3.5) s'exécute sur Ruby 1.9. J'ai cette fonction qui effectue 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 quand j'essaye 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'
                ^
 

de: 29: dans `require '

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

122voto

Reactormonk Points 7990

Ecrivez # encoding: utf-8 en plus de ce fichier. Cela change le codage par défaut de tous les littéraux chaîne / expression rationnelle de ce fichier utf-8 . Le codage par défaut pour tous les littéraux est US-ASCII , ce qui ne peut pas représenter á .

3voto

ohho Points 17243

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

0voto

Carlos Saltos Points 11

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! (Expression rationnelle. Nouveau 'á | ã | à | ä | â', nil, 'n'), 'a'

Plus de détails ici:

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X