2010-11-04 20 views
11

Ich arbeite an einer Rails-Anwendung, die eine Französisch Übersetzung über Ajax und ich aus irgendeinem Grund trägt halten den folgenden Fehler in dem Protokoll erhalten:Rails 3 Encoding :: CompatibilityError

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

Wer weiß, wie um das zu beheben?

UPDATE: Dies funktioniert auf dem WEBrick trennt

Platz # encode: UTF-8 am Anfang jeder Datei, die Sie mit verschiedenen Zeichen arbeiten wollen

ich das nicht auf einem Schienen-Server mit Thin zu arbeiten bekommen. .. irgendjemand anderes in das hineingeraten?

+0

Verwenden Sie den "Mysql" Edelstein? –

Antwort

1

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

den obigen Link fixiert mein Problem.

Speziell myString.force_encoding('UTF-8') auf der Zeichenfolge vor dem Senden für die Übersetzung.

den Beispielcode in der Application_controller.rb-Datei abgelegt und alles ist gut

+2

Ihr Link ist verrottet. Können Sie den Beispielcode hier einfügen? – Will

+0

+1 für das Einfügen der notwendigen Code in die Antwort, würde andere Zeit sparen – tmaximini

+0

Code war für mich dort, 'String.force_encoding ('UTF-8')' ist die beste Problemumgehung, die ich gesehen habe. War bis zur Aktualisierung eines Servers von 1.8.7 auf 1.9.2 kein Problem – Nilloc

0

Ich weiß, das ist alt, aber ich hatte das gleiche Problem und die Lösung wurde in dem Link @dennismonsewicz gab. Im Einzelnen war der Code:

war:

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