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

Bibliothèques tierces Python Discussion :

Elixir: Enum et les caractères accentués


Sujet :

Bibliothèques tierces Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Inscrit en
    Janvier 2012
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Janvier 2012
    Messages : 1
    Par défaut Elixir: Enum et les caractères accentués
    Bonjour,

    Voici mon problème :

    J’aimerais définir un domaine de valeurs pour un champ de table. Certaines valeurs possèdent des caractères accentués.

    Lors de la génération du DDL par Elixir, une conversion est faite sur les valeurs fournies faisant ainsi que les caractères accentués ne correspondent plus.

    Voici mon code test :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    # -*- coding: iso-8859-1 -*-
     
    from elixir import *
     
    class TestEnum(Entity):
        myEnum = Field(Unicode(100),\
             Enum(u'avec é', 
                  u'avec è', 
                  u'avec à'),\
             colname='MY_ENUM')
     
    if __name__ == '__main__':
        metadata.bind = 'oracle://..:..@..'
        metadata.bind.echo = True
     
        setup_all()
        drop_all()
        create_all()


    Voici le DDL généré :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    CREATE TABLE "__main___testenum" (
        id INTEGER NOT NULL, 
        "MY_ENUM" NVARCHAR2(100), 
        PRIMARY KEY (id), 
        CHECK ("MY_ENUM" IN ('avec é', 'avec è', 'avec à '))
    )

    En corrigeant à la main le DDL et en créant la table, tout devient correct dans la BD Oracle

    Existe’-il un paramètre de configuration qui permettrait de corriger cette situation???

    Peut-être un Bogue avec Elixir???

    Merci pour vos réponses.

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 787
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 787
    Par défaut
    Salut

    iso-8859-1 dit aussi latin-1 encode les caractères sur un octet alors que la sortie 'avec é', 'avec è', 'avec à ' suggère un encodage sur 2 octets, de l'utf-8'?

    Par contre quand on ecrit u'avec é' en ayant dit iso-8859-1, on demande à l'interpréteur de considérer la suite de bytes 'avec é' comme un "string" iso-8859-1 et de la transformer en unicode (une suite de caractères codés sur 16 ou 32 bits en fonction de la version de Python utilisée/construite).

    Le DDL généré - au sens les informations expédiée au serveur de BDD - résulte de la sérialisation de cet unicode dans le format attendu par le serveur de BDD.
    note: En général cela se paramètre au niveau de la BDD et ou de la connexion.

    Peut-être un Bogue avec Elixir???
    Dans le cas particulier, s'il y a bug dans le "logiciel" ce serait plutôt du côté SQLAlchemy - qu'utilise et dont dépend Elixir dans ces opérations.
    Ceci dit, c'est plutôt un "bug" dans les neurones du programmeur qui se frotte pour la première fois dans les affres du mélange des représentations des chaînes de caractères dans différents contextes.

    Comme je n'ai pas Oracle sous la main, je ne puis que vous suggérer la lecture de la documentation SQLAlchemy sur le support du "dialect"Oracle Data Types.

    Personnellement, j'évite de tomber dans ce genre de soucis, i.e. je limite les scripts devant mentionner coding: iso-8859-1 à des bricos à vocation de test ou d'exemple. En posant que l'ensemble des strings manipulées par le programme sont "unicode", le "coding" devient une spécificité de l'interface entre le programme et le monde extérieur: console, sgdb,...

    Après vous avez des questions de "localisation", i.e. la possibilité d'utiliser des tags "avec des accents" comme dans le cas de votre enum. Dans ce cas, je passe par babel.

    Cordialement,
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. [SQL-Server] ms sql server et php : problème avec les caractères accentués
    Par stephane9422 dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 05/12/2005, 17h45
  2. [AJAX] Problèmes avec les caractères accentués
    Par marti dans le forum Servlets/JSP
    Réponses: 10
    Dernier message: 26/10/2005, 14h10
  3. Réponses: 5
    Dernier message: 04/09/2005, 12h34
  4. Réponses: 6
    Dernier message: 14/07/2005, 14h25
  5. [PostgreSQL] Les caractères accentués ?
    Par yacomor dans le forum Requêtes
    Réponses: 2
    Dernier message: 18/02/2003, 16h30

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