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

SGBD Perl Discussion :

[débutant] DBI: conversion uft8 -> latin9


Sujet :

SGBD Perl

  1. #1
    Membre actif Avatar de SaintAmand
    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 174
    Points : 203
    Points
    203
    Par défaut [débutant] DBI: conversion uft8 -> latin9
    Bonjour,

    J'ai une base de données PostgreSQL encodée en uft8. J'utilise DBI pour générer des rapports. J'aimerais produire des XLS en LATIN9. Pour cela, je commence mon script par un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    my $sth = $dbh->prepare("SET CLIENT_ENCODING TO 'LATIN9'");
    $sth->execute();
    mais ensuite il s'interrompt parfois avec le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    DBD::Pg::st execute failed: ERROR:  character 0xe28099 of encoding
    "UNICODE" has no equivalent in "LATIN9"
    Y a t-il moyen de faire en sorte que les caractères qui n'ont pas d'équivalent soient oubliés ?
    Merci.

  2. #2
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    A priori il s'agit d'une erreur généré par PostgreSQL, pas par Perl. Tu devrais poser la question sur le forum des SGBD, tu serais plus susceptible d'y obtenir une réponse (il y a probablement moyen de faire ignorer ce genre d'erreur par PostgreSQL).
    Si tu ne trouves pas, tu peux toujours faire les conversions dans le programme Perl lui-même avec Encode (qui possède divers mode de traitement des erreurs).

    --
    Jedaï

  3. #3
    Membre actif Avatar de SaintAmand
    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 174
    Points : 203
    Points
    203
    Par défaut
    J'ai des doutes qu'il faille chercher du côté de Postgres. Dans la documentation je lis:
    Si la conversion d'un caractère particulier n'est pas possible -- supposons que vous avez choisi EUC_JP pour le serveur et LATIN1 pour le client, alors certains caractères japonais ne pourront pas être convertis en LATIN1 -- ils seront transformés en leur valeur hexadécimale entre parenthèses, i.e., (826C)
    --
    SaintAmand

  4. #4
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Je doute très très (très) fortement que la conversion s'exécute du côté de Perl alors que c'est à la base que tu as demandé de la faire, de ce fait je ne vois pas pourquoi Perl génèrerait une telle erreur : a priori il reçoit des informations en latin9 de la DB et n'est même pas censé savoir qu'elles étaient en Unicode auparavant. En fait la chaîne CLIENT_ENCODING n'est même pas présente dans les sources de DBI ou de DBD::Pg, je vois mal où Perl pourrait intervenir dans l'équation... Je te le répète, le problème vient de la base de donnée quoiqu'en dise la documentation (je peux imaginer une dizaines de raisons pour laquelle cette phrase ne s'applique pas dans ton cas, d'un problème de version à un réglage de rigueur de la DB plus fort que par défaut...).

    Au fait tu peux remplacer ton code par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $dbh->do("SET CLIENT_ENCODING TO 'LATIN9'");
    prepare()/execute() c'est pour les requêtes SELECT ou les requêtes que tu veux répéter plusieurs fois.

    Si vraiment tu n'arrives pas à obtenir le comportement voulu du côté de la base, pourquoi ne pas effectuer la conversion du côté client ? C'est moins modulaire mais si vraiment tu ne trouves pas...

    --
    Jedaï

Discussions similaires

  1. [DBI] Pb conversion utf8->Latin9
    Par SaintAmand dans le forum PostgreSQL
    Réponses: 0
    Dernier message: 02/09/2007, 16h23
  2. Réponses: 1
    Dernier message: 23/03/2006, 16h46
  3. [D7][Débutant] Problème conversion String <- TEdit
    Par _alex_ dans le forum Composants VCL
    Réponses: 2
    Dernier message: 16/02/2006, 22h48
  4. Réponses: 10
    Dernier message: 31/01/2006, 17h34
  5. Réponses: 6
    Dernier message: 16/05/2004, 19h03

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