Vous n'êtes pas identifié(e).

#1 20/09/2011 11:08:59

butin-matou
Membre

Problème d'encoding

Bonjour,

Mon travail se déroule en trois phases.
1. Je developpe et teste des requêtes SQL avec SqlDBX sous Windows.
2. Une tache cron éxécute ces requêtes SQL nuitamment utilisant des batches dans psql.
3. Ces batches créent des tables qui sont visualisables par mes collègues via des TCD dans Excel via ODBC.

Mais j'ai des messages d'erreur avec ce genre de requête :

CASE WHEN ... THEN  'Déséquilibré'
    ELSE 'Equilibré' END     AS Equilibre

Les lettres accentués posent problème.

    Sous Windows avec SqlDBX 3.5.1 :
    ERREUR: séquence d'octets invalide pour l'encodage « UTF8 » : 0xe92720;
    Error while executing the query

    Et avec psql :
    ERREUR:  séquence d'octets invalide pour l'encodage « UTF8 » : 0xe92720

    Dans Excel, pas d'erreur d'accents, puisque la table de résultats n'est pas créée.


Comment faire pour que les lettres accentués français s'enregistrent et se voient correctement ?
        1. dans mon requetteur client (SqlDBX) sous Windows et
        2. dans psql et
        3. dans Excel.

Merci d'avance pour toute aide.

BM
--------------------
pgsama=# \l
                               Liste des bases de données
    Nom    | Propriétaire | Encodage |    Tri     | Type caract. |    Droits d'accès     
-----------+--------------+----------+------------+--------------+-----------------------
pgsama    | postgres     | UTF8     | fr_FR.utf8 | fr_FR.utf8   |
postgres  | postgres     | UTF8     | fr_FR.utf8 | fr_FR.utf8   |
template0 | postgres     | UTF8     | fr_FR.utf8 | fr_FR.utf8   | =c/postgres          +
           |              |          |            |              | postgres=CTc/postgres
template1 | postgres     | UTF8     | fr_FR.utf8 | fr_FR.utf8   | =c/postgres          +
           |              |          |            |              | postgres=CTc/postgres
(4 lignes)

--------------------
Utilisant
Ubuntu 11.04 French
psql 9.0.3
SqlDBX 3.5.1
Win7 Pro French

Dernière modification par butin-matou (20/09/2011 12:44:14)

Hors ligne

#2 20/09/2011 17:12:59

gleu
Administrateur

Re : Problème d'encoding

Il faut les saisir en UTF8, ce que ne semble pas faire votre outil.


Guillaume.

Hors ligne

#3 22/09/2011 14:14:27

dim
Membre

Re : Problème d'encoding

Il faut en réalité que le paramétrage client_encoding soit réglé à la bonne valeur, c'est à dire qu'il doit correspondre à l'encodage utilisé par l'application.  Chaque application peut le régler différemment si nécessaire.

  http://docs.postgresqlfr.org/9.0/runtim … t-encoding
  http://docs.postgresqlfr.org/9.0/multibyte.html section 22.2.3

La valeur par défaut du client_encoding est l'encodage de la base de données, ici UTF-8, d'où vos messages d'erreur.


Dimitri Fontaine
http://2ndQuadrant.fr     PostgreSQL : Expertise, Formation et Support

Hors ligne

#4 22/09/2011 14:27:14

Marc Cousin
Membre

Re : Problème d'encoding

En fait, avec les drivers odbc, on spécifie l'encoding au moment de la création du dsn, de mémoire (il y a un driver odbc 'ansi' et un 'unicode'). Ça ne pourrait pas tout simplement venir du choix du mauvais, par rapport à l'application utilisant les données ? (l'unicode de windows, par défaut, c'est de l'utf16 little endian…)


Marc.

Hors ligne

#5 22/09/2011 14:33:29

gleu
Administrateur

Re : Problème d'encoding

Bonne mémoire, il y a bien ces deux drivers. Par contre, je ne suis pas sûr que l'ansi soit toujours proposé.


Guillaume.

Hors ligne

#6 23/09/2011 09:49:20

butin-matou
Membre

Re : Problème d'encoding

Bonjour,

Problème résolu.

J'ai redémarré le serveur Postgres
pour recharger la config que j'avais avant le problème (et
avant mes tentatives de correction). Mais le problème persistait.
Je savais au moins que le problème n'était probalement pas du coté serveur.

J'ai vu que les seuls tableaux Excel qui posaient problème
étaient ceux qui utilisaient des champs-contenant-des-accents
définies en dur dans les scripts SQL.
(Surtout des CASE WHEN ...)
Les tableaux qui lisaient directement des champs-de-la-base-contenant-des-accents
s'affichaient correctement.



En creusant, j'ai découvert que mon Notepad++
que j'utilise parfois pour modifier des scripts était règlé,
pour l'encodage, sur "Encoder en ASCII" .
J'ai modifié le paramètre en "Convertir en ASCII", et re-sauvegardé et relancé le script.

Les messages d'erreur ont disparu et l'affichage dans Excel est devenu normal, parfait.

Merci pour toutes vos suggestions.

BM

Dernière modification par butin-matou (23/09/2011 09:50:12)

Hors ligne

Pied de page des forums