2009-08-28 11 views
9

Estoy usando rieles 2.3.3 y ruby ​​1.9.1.Problemas de codificación en rieles en ruby ​​1.9.1

Estoy tratando de representar una vista que incluye un parcial. En el resultado parcial i, un campo de un modelo que está codificado en UTF8. Esta falla con

ActionView::TemplateError (incompatible character encodings: ASCII-8BIT and UTF-8) on line #248 of app/views/movie/show.html.erb: 
245: <!-- Coloumn right | start --> 
246: <div class="col_right"> 
247: 
248:  <%= render :partial => 'movie_stats' %> 
249: 
250:  <!-- uploaders --> 
251:  <div class="box_white">  

Por otro lado, me puede dar salida al campo con el contenido utf8 bien si uso ese campo directamente en una vista (cuando no está en una parcial).

¿Cómo puedo solucionar esto? Ya intenté configurar la codificación predeterminada pero eso no pareció funcionar.

+0

¿Cómo trataste de configurar la codificación predeterminada? ¿Puede darnos un ejemplo? –

Respuesta

9

Acabo de tener esto también, así que creo que vale la pena tener la respuesta correcta.

La gema MySql 2.8.1 no es compatible con utf-8, por lo que a veces devolverá cadenas UTF y mentirá a Rails, diciéndole que son ASCII cuando en realidad son UTF-8. Esto hace que las cosas exploten.

Entonces, puede parche de mono o conseguir una gema MySql compatible. Ver: http://gnuu.org/2009/11/06/ruby19-rails-mysql-utf8/

2

Parece haber un problema con la codificación de ERB en Ruby 1.9. Más detalles están en this Lighthouse ticket. Un parche con una solución alternativa has been included, ¿quizás te funcione?

El problema es el código erb en la distribución de ruby ​​1.9. Cuando compila el código de plantilla, fuerza una codificación 'ASCII-8bit', el problema es cuando el código de plantilla tiene caracteres multibyte, el código de plantilla se devuelve en una cadena 'ASCII-8bit' y cuando esta cadena es concat con 'UTF8' cadena con carácter multibyte la excepción se plantea porque las cadenas entre estas codificaciones solo son compatibles cuando ambas solo tienen caracteres de siete bits.

+1

resulta que la gema mysql fue la culpable. devolvió todas las cadenas como ASCII-8BIT, incluso si son UTF8 en la base de datos. El uso de http://github.com/hectoregm/mysql-ruby/tree/master lo corrigió – tliff

+0

Lo siento, señor, he votado negativamente por esta causa después de experimentar este problema, así como fue la falla de gemas de mysql, creo que el error está en un poco de limbo nadie está realmente seguro si es un problema. –

0

Parece haber una incompatibilidad entre Ruby 1.9x y la gema mysql con respecto a cómo se transmiten las cadenas hacia adelante y hacia atrás (específicamente la codificación de las cadenas).

Para revisión, ejecute

gem install mysql2 

en el servidor y actualizar el archivo de configuración de base de datos para utilizar esta joya en lugar de la anterior.

Cuestiones relacionadas