UnicodeDecodeError qunad j'essaie de charger ma bdd sur mon app web

problème chargement de la bdd avec une web django sur heroku

a marqué ce sujet comme résolu.
Auteur du sujet

bonjour,

tout d’abord merci à ceux qui prennent le temps de me répondre,

j’ai un problème avec l’importation de la bdd de mon app django,

j’essaye de charger le contenu de ma bdd sur mon app web (que j’ai déployé avec heroku ) mais j’ai cette erreur : UnicodeDecodeError: 'utf-8' codec can’t decode byte 0xe9 in position 460: invalid continuation byte pourtant dans mon fichier html j’ai bien précisé utf 8 et j’ai essayé au début avec quelques données dans ma bdd et j’arrivais a charger le contenu sur l’app web mais des que j’ai rajouté tout le contenu que je voulais et que j’ai relancé la commande qui me permet de charger les données ca m’a mit cette erreur ma bdd est aussi en utf-8 et les paramètres collation et character type sont en C , a la base il étaient en "French_switzerland.1252" mais j’avais aussi eus la meme erreur du coup j’ai essayé de modifier ce paramètre pour voir si ca passait j’ai utiliser les commandes dumpsdata qui crée un fichier json avec le contenu de ma bdd et la commande loaddata quand j’étais connecté à mon app sur heroku

j’aimerais également savoir si utf-8 à des symboles qu’il ne prend pas en compte ou génère des bugs ? étant donné que tout fonctionnait bien quand j’ai essayé l’importation avec quelques données "test" dans les tables. Je me demande si après avoir rentrer plus de 80 lignes dans ma bdd j’aurais pu écrire un symbole du genre @ ou € qui est illisible pour utf-8 et me génère cette erreur.

merci d’avance du coup de main :slight_smile:

+0 -0

ma bdd est aussi en utf-8 et les paramètres collation et character type sont en C , a la base il étaient en "French_switzerland.1252" mais j’avais aussi eus la meme erreur du coup j’ai essayé de modifier ce paramètre pour voir si ca passait

mathias.reichenbadic

Salut,

Je pense que le problème peut venir de là : pour que tout fonctionne bien il faudrait effectivement qu’elle soit configurée en UTF-8, mais aussi que les données soient encodées comme tel. Là tu as juste dû changer la configuration mais pas réencoder les données.

Non il n’y a pas de symboles UTF-8 qui ne sont pas gérées, simplement des séquences invalides comme c’est le cas de ce 0xe9 tout seul. C’est par contre une séquence valide en CP1252 (l’encodage de ta base si je comprends bien), il s’agit d’un « é ».

Mais si tu ne veux/peux pas changer l’encodage, il doit aussi t’être possible de préciser l’encodage à utiliser lors de l’ouverture de la connexion auprès de la DB.

Auteur du sujet

@entwanne

salut, merci de ta réponse,

comment je peux réencoder les données ? je suis sur pgadmin si jamais.

quand j’ai voulu essayé avec une bdd en utf-8 et les 2 réglages en C j’ai donc créer cette bdd et réecrit les données à la main dedans elle devrait directement être encodé comme il faut non ?

y a juste un truc que j’ai pas compris dans ton deuxième paragraphe, ca veut dire que mon erreur vient d’un "é" qui n’est pas lu correctement par l’encodage ? j’ai deux bdd "test" une qui est en effet en cp 1252 et l’autre en C mais l’erreur apparait sur les deux.

je viens de faire quelques tests, c’est en effet les "é" qui ne sont pas lu, je me demande si ca pourrait venir du fichier .json que j’ai généré avec la commande dumpdata qui est mal lu par utf-8 sinon je veux bien que tu m’expliques comment je peux m’assurer que mes données soient bien encodés stp

je m’excuse d’avance si je capte pas tout, c’est vraiment mon point faible les bdd merci de m’aider :)

Édité par mathias.reichenbadic

+0 -0

comment je peux réencoder les données ? je suis sur pgadmin si jamais.

mathias.reichenbadic

Ça je ne sais pas, je ne connais pas assez les outils, mais peut-être les commandes d’import/export permettent de préciser des encodages.

quand j’ai voulu essayé avec une bdd en utf-8 et les 2 réglages en C j’ai donc créer cette bdd et réecrit les données à la main dedans elle devrait directement être encodé comme il faut non ?

mathias.reichenbadic

Comment as-tu créé et réécrit ces données ? L’encodage était-il bien configuré ?

y a juste un truc que j’ai pas compris dans ton deuxième paragraphe, ca veut dire que mon erreur vient d’un "é" qui n’est pas lu correctement par l’encodage ? j’ai deux bdd "test" une qui est en effet en cp 1252 et l’autre en C mais l’erreur apparait sur les deux.

mathias.reichenbadic

Ton erreur vient de l’encodage mais c’est en effet sur le « é » qu’elle apparaît. Car les caractères de la table ASCII s’encodent de la même manière en UTF-8 et en CP1252, donc tu ne vois pas de soucis sur ces caractères mais seulement sur les caractères accentués.

Quand tu parles d’encodage C, de quoi s’agit-il ? ASCII ?

je viens de faire quelques tests, c’est en effet les "é" qui ne sont pas lu, je me demande si ca pourrait venir du fichier .json que j’ai généré avec la commande dumpdata qui est mal lu par utf-8 sinon je veux bien que tu m’expliques comment je peux m’assurer que mes données soient bien encodés stp

Alors au niveau du JSON je pense que tu peux essayer de regarder avec un éditeur de texte comment sont encodés les caractères car il me semble que JSON ne contient que des caractères ASCII et des séquences d’échappement (\uxxxx), donc tu peux reconnaître l’encodage suivant les séquences utilisées pour un caractère précis.
Mais il ne semble pas que JSON supporte d’autres encodages que les unicode : https://docs.python.org/fr/3/library/json.html#character-encodings donc ton fichier doit être valide.

Auteur du sujet

Comment as-tu créé et réécrit ces données ? L’encodage était-il bien configuré ?

alors j’ai recréé une nouvelle bdd dont je pouvais choisir l’encodage, j’ai donc choisi utf-8 et ensuite j’ai réglé les paramètres collation et character type sur C, ils étaient réglés sur french_switzerland.1252 mais j’ai voulu essayer autre chose pour voir si ca pouvait venir de là mais même erreur dans les deux. est-ce que ca pourrait être le LC_TYPE le problème ? je crois me souvenir que au moment de créer une bdd en latin1 par exemple, je pouvais pas la créer à cause du LC_TYPE qui était réglé sur French_switzerland.1252

pour la réecriture j’ai simplement editer une table de données dans laquelle je voulais mettre mes données, c’est une table "contact" avec dedasns des varchar pour les infos type "text" description de la personne, son nom, ses hobbys et le reste c’est des int pour l’age et un boolean. j’y ai finalement inséré tout mes données à la main pour être sur de ne pas faire une mauvaise manip en important un fichier ou je ne sais quoi.

Quand tu parles d’encodage C, de quoi s’agit-il ? ASCII ?

je ne crois pas, c’est dans ces deux réglages ("collation" et "character type") que j’avais le choix entre "French_Switzerland.1252", "C" ou "POSIX" mais je n’ai pas eus de précision sur la nature de "C"

Merci encore pour tes éclaircissements ça m’a déjà bien aidé à situé le problème ce que tu m’as dis :)

Édité par mathias.reichenbadic

+0 -0

D’accord, je ne sais pas bien comment te répondre car je ne connais pas assez, mais je vais essayer de te poser des questions qui pourront peut-être t’orienter.

Quand tu dis créer ta base de données et préciser l’encodage, comment procèdes-tu, avec quelle commande ?
Est-ce que tu as plus d’informations sur ces collation et character typye, qu’en dit la documentation ? Comment interagissent-ils avec l’encodage défini et quel est le comportement associé à chaque valeur ?

Tu parles d’une réécriture dans une table, mais donc dans la même base ? Je pense que l’encodage est réglé globalement au niveau de la page et non par table, il faudrait essayer avec une deuxième base configurée différemment.

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte