2010-07-11 21 views
6

que estoy tratando de migrar una aplicación Sinatra al rubí 1,9rubí 1,9 + Sinatra codificación de caracteres incompatibles: ASCII-8BIT y UTF-8

estoy usando Sinatra 1.0, 1.2.0 y acumular erb plantillas

cuando comienzo Sinatra funciona pero cuando solicito la página web desde el navegador me sale este error:

Encoding::CompatibilityError at/
incompatible character encodings: ASCII-8BIT and UTF-8 

todos los archivos .RB tiene esta cabecera:

#!/usr/bin/env ruby 
# encoding: utf-8 

Creo que el problema está en los archivos de erb incluso si se demuestra que es codificación UTF-8

[[email protected] views]$ file home.erb 
home.erb: UTF-8 Unicode text 

cualquiera tenía este problema antes? ¿Sinatra no es totalmente compatible con ruby ​​1.9?

+0

Intente cambiar temporalmente los archivos a ascii solamente. – Adrian

+1

el problema es que necesito usar utf-8 fletadores en las plantillas. – John

+0

Si usa HTML, debe reemplazarlos por entidades. De lo contrario, es posible que desee intentar sacarlos temporalmente solo para ver si son el problema. – Adrian

Respuesta

15

No estoy familiarizado con los detalles de su situación, pero este tipo de error ha aparecido en Ruby 1.9 cuando hay un intento de concatenar una cadena en el código fuente (generalmente codificado en UTF-8) con una cadena desde fuera del sistema, por ejemplo, entrada de un formulario HTML o datos de una base de datos.

ASCII-8BIT es básicamente un sinónimo de binario. Sugiere que la cadena de entrada no fue etiquetada con la codificación real que se ha utilizado (por ejemplo, UTF-8 o ISO-8859-1).

Mi entendimiento es que los mensajes de excepción no se ven en Ruby 1.8 porque trata cadenas como binarias y concatena silenciosamente cadenas de diferentes codificaciones. Por razones sutiles, esto a menudo no es un problema.

Ayer encontré un error similar y encontré esta excelente descripción.

Una opción para transmitir su mensaje de error que se vaya a utilizar es force_encoding ('UTF-8') (o alguna otra codificación) en la cadena procedente de la fuente externa. Esto no debe hacerse a la ligera, y querrá tener una idea de las implicaciones.

0

Tuve el mismo problema. El problema era un archivo codificado para utf8 que debería ser us-ascii.

que comprobar con el comando file (en OSX):

$ file --mime-encoding somefile 
somefile: utf-8 

Después de quitar los caracteres extraños del archivo:

$ file --mime-encoding somefile 
somefile: us-ascii 

Esto ha solucionado el problema para mí.

Cuestiones relacionadas