web-dev-qa-db-fra.com

Ruby on Rails 3, encodages de caractères incompatibles: UTF-8 et ASCII-8BIT avec i18n

J'ai des problèmes avec le couple Rails 3.0.1, Ruby 1.9.2 et la localisation de mon site Web).

Le problème est assez simple, j'ai quelque chose comme ça dans une vue:

f.input :Zip_code, :label => I18n.t('labels.Zip_code')

et un fichier es.yml:

es:
  labels:
    Zip_code: "Este código postal no es valido."

Il n'y a aucun problème avec le fichier en.yml (c'est du pur ASCII) mais lorsque le site Web est défini avec i18n.locale == 'es' J'obtiens cette erreur:

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

Je regarde autour de moi depuis un bon moment, mais je n'ai pas trouvé de moyen d'utiliser mes fichiers de traduction UTF-8.

Certains savaient comment le faire fonctionner?

Merci de votre aide.

34
Nicolas Guillaume

Ok donc problème résolu après quelques heures de recherche sur Google ...

Il y avait en fait deux bogues dans mon code. Le premier était une erreur de codage de fichier et le second était le problème avec la configuration de la base de données MySQL.

Tout d'abord, pour résoudre l'erreur causée par MySQL, j'ai utilisé ces deux articles:

http://www.dotkam.com/2008/09/14/configure-Rails-and-mysql-to-support-utf-8/

http://www.rorra.com.ar/2010/07/30/Rails-3-mysql-and-utf-8/

Deuxièmement, pour résoudre le problème d'encodage des fichiers, j'ai ajouté ces 2 lignes dans ma config/environment.rb

Encoding.default_external = Encoding::UTF_8
Encoding.default_internal = Encoding::UTF_8

J'espère que cela aidera quelqu'un :)

47

J'ai résolu la plupart des problèmes en combinant de nombreuses solutions:

  • Assure-toi application.rb a cette ligne: config.encoding = "utf-8".
  • Assurez-vous que vous utilisez la gemme 'mysql2'
  • En mettant # encoding: utf-8 en haut de tout fichier contenant des caractères utf-8.
  • Ajoutez les deux lignes suivantes au-dessus du <App Name>::Application.initialize! faire la queue environment.rb:

    Encoding.default_external = Encoding::UTF_8
    Encoding.default_internal = Encoding::UTF_8
    

http://rorguide.blogspot.com/2011/06/incompatible-character-encodings-ascii.html

23
Ritesh Kumar

L'utilisation de cette fonction de décompression m'a finalement aidé à trier cela, essayez ceci si vous obtenez le message d'erreur Impossible de convertir:

myString.unpack('U*').pack('U*')
0
flunder

Assurez-vous que vous avez config.encoding = "utf-8" dans ton config/application.rb. De plus, votre exemple de fichier de traduction ne correspond pas à la clé que vous recherchez (com_name et first_name) mais je suppose que cela pourrait être juste une faute de frappe.

0
noodl

Êtes-vous sûr que votre es.yml le fichier a été enregistré au format UTF-8?

Si vous êtes sous Windows, utilisez http://notepad-plus-plus.org/ pour vous en assurer.

0
Fábio Batista