2010-11-04 31 views
11

Je travaille sur une application de rails qui présente une traduction française via ajax et pour une raison que je continue à obtenir l'erreur suivante dans le journal:Rails 3 encodage :: CompatibilityError

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

Est-ce que quelqu'un sait comment réparer ça?

FIX: Cela fonctionne sur le WEBrick couper

place # encode: UTF-8 en haut de chaque fichier que vous voulez travailler avec différents caractères

Je ne peux pas obtenir que cela fonctionne sur un serveur rails avec Thin. .. quelqu'un d'autre se heurter à cela?

+0

Utilisez-vous la gemme "mysql"? –

Répondre

1

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

le lien ci-dessus fixé mon problème.

Spécifiquement myString.force_encoding('UTF-8') sur la chaîne avant de l'envoyer à la traduction.

placé l'exemple de code dans le fichier Application_controller.rb et tout va bien

+2

Votre lien pourri. Pouvez-vous coller l'exemple de code ici? – Will

+0

+1 pour coller le code nécessaire dans la réponse, sauverait le temps d'autres – tmaximini

+0

Le code était là pour moi, 'String.force_encoding ('UTF-8')' est la meilleure solution de contournement que j'ai vue. N'a pas été un problème jusqu'à la mise à niveau d'un serveur de 1.8.7 à 1.9.2 – Nilloc

0

Je sais que c'est vieux, mais j'ai eu le même problème et la solution était dans le @dennismonsewicz lien a donné. En détail, le code a été:

était:

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