2009-11-22 14 views
7

Recibo el siguiente error con mi Ruby 1.9 & Rails 2.3.4. Esto sucede cuando el usuario envía un carácter estándar que no es ASCII.codificaciones de caracteres incompatibles: ASCII-8BIT y UTF-8 en Ruby 1.9

He leído muchos recursos en línea, pero ninguno parece tener una solución que funcionó.

He intentado utilizar (como algunos recursos sugeridos)

string.force_encoding('utf-8') 

pero no sirvió de nada.

¿Alguna idea de cómo resolver esto? ¿Hay alguna manera de eliminar esos caracteres antes de guardarlos en la base de datos? ¿O hay una manera de hacer que se muestren?

+4

Hay un buen post sobre ello en el blog Yehuda Katz: http: // yehudakatz.com/2010/05/17/encodings-unabridged/ – makevoid

+0

He estado peleando con esto por un tiempo. La gema Mysql2 no funcionó, ni ninguna de las otras soluciones que se sugirieron. Para otros buscadores que puedan tropezar con esto: si está utilizando blob u otro tipo de datos en mysql, cámbielo a cadena o texto. Mantiene la codificación y no más dolores de cabeza. –

Respuesta

1

No sé mucho sobre Ruby (o Rails), pero me imagino que el problema se debe a la falta de control sobre las codificaciones de los caracteres.

Primero, debe decidir qué codificación está almacenando en su base de datos. Luego, debe asegurarse de convertir todo el texto a esa codificación antes de almacenarla en la base de datos. Para hacer eso, primero necesita saber qué codificación es para empezar.

Un consejo que se repite a menudo es decodificar todas las entradas de cualquier codificación que utilice, para unicode (si su idioma lo admite) tan pronto como sea posible después de obtener el control de la misma. Entonces sabrá que todo el texto que maneja en su programa es unicode. En el otro extremo, codifique el texto a la codificación de salida que desee como último paso antes de enviarlo.

La clave es saber siempre qué codificación está usando una pieza de texto en cualquier lugar de su código.

10

Para ruby ​​1.9 y Rails 3.0.x, use el adaptador mysql2.

En su Gemfile:

gem 'mysql2', '~> 0.2.7' 

y actualizar su database.yml a:

adapter: mysql2 

http://www.rorra.com.ar/2010/07/30/rails-3-mysql-and-utf-8/

+1

Gracias, esto funcionó muy bien para mí. Pero ten en cuenta que mysql2 v0.3. * Arroja errores con Rails 3.0.7. http://stackoverflow.com/questions/3467054/problem-with-mysql2-and-rails3-bundler – aNoble

+1

Estaba luchando con las 'codificaciones de caracteres incompatibles: ASCII-8BIT y UTF-8' durante el uso de' rack-webconsole' - entonces encontré esta publicación. Gracias, @Jhony Fung! –

Cuestiones relacionadas