2010-11-04 17 views
11

Estoy trabajando en una aplicación de rieles que presenta una traducción al francés a través de AJAX y por alguna razón me siguen dando el siguiente error en el registro de:Rails 3 Codificación :: CompatibilityError

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

¿Alguien sabe cómo ¿para arreglar esto?

REVISIÓN: Esto funciona en el WEBrick romper

Lugar # encode: UTF-8 en la parte superior de cada archivo que desea trabajar con diferentes caracteres

no puedo conseguir que esto funcione en un servidor de rieles con Thin. .. ¿alguien más se encuentra con esto?

+0

¿Utiliza la gema "mysql"? –

Respuesta

1

https://rails.lighthouseapp.com/projects/8994/tickets/4336-ruby19-submitted-string-form-parameters-with-non-ascii-characters-cause-encoding-errors

el enlace anterior fijado mi problema.

Específicamente myString.force_encoding('UTF-8') en la cadena antes de enviarla para su traducción.

colocado el código de ejemplo en el archivo Application_controller.rb y todo está bien

+2

Su enlace podrido. ¿Puedes pegar el código de muestra aquí? – Will

+0

+1 para pegar el código necesario en la respuesta, ahorraría tiempo a otros – tmaximini

+0

El código estaba allí para mí, 'String.force_encoding ('UTF-8')' es la mejor solución que he visto. No fue un problema hasta actualizar un servidor de 1.8.7 a 1.9.2 – Nilloc

0

Sé que esto es viejo, pero tenía el mismo problema y la solución estaba en el enlace @dennismonsewicz dio. En detalle, el código fue:

fue:

before_filter :force_utf8_params 

    def force_utf8_params 
    traverse = lambda do |object, block| 
     if object.kind_of?(Hash) 
     object.each_value { |o| traverse.call(o, block) } 
     elsif object.kind_of?(Array) 
     object.each { |o| traverse.call(o, block) } 
     else 
     block.call(object) 
     end 
     object 
    end 
    force_encoding = lambda do |o| 
     o.force_encoding(Encoding::UTF_8) if o.respond_to?(:force_encoding) 
    end 
    traverse.call(params, force_encoding) 
    end