IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Ruby on Rails Discussion :

ruby on rails et utf8 : comment faites-vous?


Sujet :

Ruby on Rails

  1. #1
    j6m
    j6m est déconnecté
    Membre régulier
    Inscrit en
    Février 2006
    Messages
    87
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 87
    Points : 84
    Points
    84
    Par défaut ruby on rails et utf8 : comment faites-vous?
    Bonjour, j'ai installé une base Oracle pour tester Ruby On Rails et j'ai de gros problèmes avec l'Unicode. Ma base est en UTF-8 et apparemment ni côté ruby ni côté rails ça n'a l'air d'être trés bien géré. Résultat mes caractères accentués sont jolis dans Ruby mais dès que je les sors par SQL c'est des car genre ├
    ça c'est e2 94 9c en hexa c'est ce qu'il y a dans ma base et c'est ce que lui a passé Ruby / Rails. Mais ça veut dire surtout des données corrompues.
    J'ai beau rajouter des et autres NLS_LANG un peu partout, rien n'y fait.
    quand la pierre tombe sur l’œuf, malheur à l’œuf
    quand l’œuf tombe sur la pierre, malheur à l’œuf

  2. #2
    Expert éminent
    Avatar de titoumimi
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    3 707
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 707
    Points : 7 285
    Points
    7 285
    Par défaut
    tu utilises un IDE pour faire du Rails ? Eclipse ou RadRails ?

    Si c'est le cas, fait un click droit sur la racine de ton projet => properties => Text-file-encoding => UTF8

    Sinon, tu as ça dans la FAQ :

    http://ruby.developpez.com/faq/?page=Rails#rails_accent
    Globalement inoffensif
    Merci de respecter les règles du forum.
    Aucune question technique par MP !
    _______________________________________________________________________
    Cours Ruby et Ruby on Rails (RoR) - Cours PHP - FAQ Ruby / Rails - Livres Ruby / Rails
    Ajax facile avec Ruby on Rails, Prototype, script.aculo.us et les RJS
    Tutoriaux HTML/CSS et PHP

  3. #3
    Membre éclairé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    510
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 510
    Points : 652
    Points
    652
    Par défaut
    Perso j'ai fait :
    - "encoding: utf8" dans le fichier database.yml
    - Mysql en utf8 + base générée en utf8
    Voila c'est tout. Quand j'accede à la base avec Phpmyadmin, j'ai des caractères pourris, mais quand c'est Rails qui va les chercher c'est OK.
    C'est une vraie galere ce truc.

  4. #4
    j6m
    j6m est déconnecté
    Membre régulier
    Inscrit en
    Février 2006
    Messages
    87
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 87
    Points : 84
    Points
    84
    Par défaut
    moi c'est une base oracle mais le pb est relativement similaire : le "client ruby / rails" arrive avec des caractères français sur 8 ou 16 bits mais une langue genre ascii7bits. Quand ta base reçoit é elle devrait avoir c3a9 mais si tu regardes ce qui est codé dans ta base tu verras que ce n'est pas ça. Quand le client ruby avec son characterset exotique redemande la donnée la conversion se fait à l'envers et ça marche. Mais quand tu regardes par phpMyadmin tu vois ta donnée en utf8 convertie pour ton client français et là c'est n'importe quoi. Parce que les infos supplémentaires nécessaires pour faire les transcodages en utf8 ne sont pas en base (puisque le client ruby n'a pas "prévenu" qu'il arrivait avec).
    Moi j'ai essayé avec une base Oracle, avec encoding: utf8 mais ça ne changeait rien. Par SQL*Plus et en utilisant la fonction dump (je ne sais pas s'il y a un équivalent sous MySQL) j'ai pu voir que mes données étaient corrompues mais ça ne me disait pas comment dire à Ruby de travailler proprement...
    Et donc c'est là :
    Aujourd'hui 09h27
    titoumimi tu utilises un IDE pour faire du Rails ? Eclipse ou RadRails ?

    Si c'est le cas, fait un click droit sur la racine de ton projet => properties => Text-file-encoding => UTF8

    Sinon, tu as ça dans la FAQ :

    http://ruby.developpez.com/faq/?page=Rails#rails_accent
    il faut mettre

    class ApplicationController < ActionController::Base
    before_filter :headers_iso

    def headers_iso
    headers["content-type"]= "text/html; charset=iso-8859-1"
    end
    end

    dans app/controllers/application.rb
    et ça, ça fait bien de l'unicode correctement codé sur tout le chemin. Là je suis sûr de pouvoir envoyer les 7 lignes de ma table books à n'importe quelle base de données dans n'importe quelle langue et de la rapatrier avec les mêmes données dans ma base de départ.

    En tout cas, Super merci titoumimi!
    quand la pierre tombe sur l’œuf, malheur à l’œuf
    quand l’œuf tombe sur la pierre, malheur à l’œuf

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Configuration] Comment faites-vous pour séparer les paramètres offline/online
    Par robichou dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 4
    Dernier message: 20/02/2007, 02h51
  2. comment faite vous pour comparer 2 classeurs excel ,
    Par melodyyy dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 15/11/2006, 14h44
  3. Affichage POST (forum) -> Comment faites vous ?
    Par snipes dans le forum Langage
    Réponses: 7
    Dernier message: 04/04/2006, 15h16
  4. [Struts]comment faites-vous pour enregistrer..
    Par pouss dans le forum Struts 1
    Réponses: 7
    Dernier message: 30/09/2005, 12h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo