Ruby 1.9-no válido multibyte char(US-ASCII)
ruby-on-rails-3 (3)
Estoy tratando de hacer que mi aplicación Rails (2.3.5) se ejecute en Ruby 1.9, tengo esta función que hace algunas transformaciones en una cadena:
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
Pero cuando intento iniciar el servidor, obtengo este error:
<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''
^
desde: 29 en ''require''
¿Cuál es la forma correcta de hacer esto en ruby 1.9? No sé qué me falta aquí
Creo que también puede cambiar las expresiones regulares de la sintaxis / re / a la sintaxis (Regexp.new ''re'', nil, ''n'')
Por ejemplo, la instrucción que mencionaste:
string.gsub! / á | ã | à | ä | â /, ''a''
se convertirá:
string.gsub! (Regexp.new ''á | ã | à | ä |'' '', nil,'' n ''),'' a ''
Más detalles aquí:
Escriba # encoding: utf-8
en la parte superior de ese archivo. Eso cambia la codificación predeterminada de todos los literales de cadena / regexp en ese archivo utf-8
. La codificación predeterminada para todos los literales es US-ASCII
, que no puede representar á
.
Para hacerlo en todo el proyecto, prueba: la joya magic_encoding .