34 votes

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

J'ai quelques problèmes avec le couple Rails 3.0.1, Ruby 1.9.2 et ma localisation de 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 es.fichier yml :

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

Il n'y a pas de problèmes avec le fr.fichier yml (c'est du pur ASCII), mais lorsque le site web est configuré avec l' i18n.locale == 'es' , j'obtiens cette erreur :

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

J'ai été en regardant autour depuis un certain temps, mais n'a pas trouvé un moyen d'utiliser mon UTF-8 fichiers de traduction.

Certains ont sait comment il fonctionne ?

Merci pour votre aide.

47voto

Nicolas Guillaume Points 2370

Ok, donc le problème est résolu après quelques heures de recherche sur google...

Il y avait en fait deux bugs dans mon code. Le premier a été l'encodage d'un fichier d'erreur et le second était le problème avec la base de Données MySQL configuration.

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 de fichier, j'ai ajouté ces 2 lignes dans mon fichier config/environment.rb

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

J'espère que cela va aider quelqu'un :)

23voto

Ritesh Kumar Points 1188

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

  • Assurez - application.rb a cette ligne: config.encoding = "utf-8".
  • Assurez-vous que vous utilisez le 'mysql2" gem
  • Mettre # encoding: utf-8 au-dessus de tout fichier contenant des caractères utf-8.
  • Ajoutez les deux lignes suivantes au-dessus de l' <App Name>::Application.initialize! ligne 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

0voto

noodl Points 8992

Assurez-vous que vous avez config.encoding = "utf-8" dans votre config / application.rb. En outre, votre exemple de fichier de traduction ne correspond pas à la clé que vous recherchez (nom_com et prénom_nom), mais je suppose que cela pourrait n'être qu'une faute de frappe.

0voto

Fábio Batista Points 11577

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

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

0voto

flunder Points 186

L'utilisation de cette fonction m'a aidé à résoudre ce problème, essayez ceci si vous obtenez le message d'erreur ne pouvant pas convertir:

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

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