11 votes

Encodage Rails 3::CompatibilityError

Je travaille sur une application rails qui soumet une traduction française via ajax et pour une raison quelconque, je continue à obtenir l'erreur suivante dans le journal :

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

Quelqu'un sait-il comment réparer cela ?

FIX:Cela fonctionne sur le serveur WEBrick

Lieu # encode: UTF-8 au début de chaque fichier que vous voulez travailler avec des caractères différents

Je n'arrive pas à le faire fonctionner sur un serveur rails avec Thin... quelqu'un d'autre a rencontré ce problème ?

2voto

dennismonsewicz Points 4324

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

le lien ci-dessus a réglé mon problème.

Plus précisément myString.force_encoding('UTF-8') sur la chaîne avant de l'envoyer à la traduction.

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

0voto

danigb Points 154

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

é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

0voto

joost Points 861

J'ai résolu ce problème en convertissant un fichier utf8 en ascii. Voir la réponse ici : ruby 1.9 + sinatra : encodages de caractères incompatibles : ASCII-8BIT et UTF-8

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X