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
É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 á
.
Pour le faire à 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:
string.gsub!/á | ã | à | ä | â /, 'a'
va devenir:
string.gsub! (Regexp.new 'á | ã | à | ä | â', nil, 'n'), 'a'
Plus de détails ici: