2012-03-25 8 views
22

Recibo dos errores, ambos relacionados con la codificación y los dos relacionados.Error de Ruby Regex: coincidencia de expresión regexp de codificación incompatible (expresión regular ASCII-8BIT con cadena UTF-8)

El primer error (técnicamente, una advertencia) llego al poner en marcha WEBrick:

/Users/USERNAME/example/config/initializers/bb-ruby.rb:54: warning: invalid Unicode Property \P: /\:\-?\P/ 

La línea que se refiere es: /\:\-?\P/,

Es sólo un poco de expresiones regulares, en última instancia, parte de esta bloque:

@@tags['Razzing'] = [ 
    /\:\-?\P/, 
    '<img src="/assets/emoticons/razzing.png">', 
    'Razzing', 
    ':P', 
    :razzing] 

Entonces, también sale el siguiente error al analizar algunas cadenas (presumiblemente debido a esta misma línea) ...

Encoding::CompatibilityError 
incompatible encoding regexp match (ASCII-8BIT regexp with UTF-8 string) 

Estoy ejecutando Ruby 1.9.2 y Rails 3.2.1.

Respuesta

26

Su Regex se está "compilando" como ASCII-8BIT.

Simplemente añadir la declaración de codificación en la parte superior del archivo en el que se declara la expresión regular:

# encoding: utf-8 

y ya está. Ahora, cuando Ruby está analizando su código, asumirá que cada literal que use (Regex, String, etc.) se especifica en la codificación UTF-8.

ACTUALIZACIÓN:UTF-8 ahora es la codificación predeterminada para Ruby 2.0 y versiones posteriores.

+0

que paró el error 'Codificación :: CompatibilityError', pero todavía estoy recibiendo el'aviso Unicode Property' no válida al iniciar WEBrick. – Shpigford

+2

El motor Regex cambió en Ruby 1.9 ... No sé a qué se refería con '\ P' originalmente, pero ahora se usa para hacer coincidir los puntos de código Unicode, y requiere un parámetro (como' \ P {L} ', para que coincida con cualquier personaje que no sea de letras). Ver: http://www.regular-expressions.info/unicode.html –

+0

Estoy tratando de hacer coincidir esto: ': -P' o': P' (como en el emoticono sacando la lengua) ... ¿cómo podría hacer eso ahora? – Shpigford

Cuestiones relacionadas