Bonjour,
Je reviens vers vous a propos de mon petit programme de gestion d'associations depuis bdd.Il y a peu j'ai eu un souci avec un caractère intempestif '\', que j'ai pu régler en gérant le formatage de mes champs par une petite routine.
Aujourd'hui j'ai a nouveau un problème avec la gestion des caractères bien que mon programme soit fonctionnel. En effet jusqu'alors j'ai développé sans me soucier des caractères accentués, soit en rentrant mes données sans utiliser les accents. Or je me suis dit qu'il faudrait avoir une approche user-friendly et patatrac tout a planté. J'ai recherché sur Internet des réponses, que j'ai trouvées, mais qui ne semble pas fonctionner. En résumé j'utilise pour toutes mes données saisies la fonction decode('utf8') et en sortie encode('utf8').'autres tuto m'ont permis d'extraire le charset utilisé grâce à la fonction sys.sdtout.encoding que j'ai utilisé pour encodé par la suite. Mais malgré toutes mes lectures,ça ne fonctionne pas, mes caractères accentués ne sont pas codés ni décodés.
Après de nombreux tests, j'ai pu enregistrer dans la bdd des champs qui conservaient les hiéroglyphes style "\xe9" en lieu et place des caractères accentués. Cependant quand j'utilise un curseur comme curs.execute(requete),pour récupérer les donées, cela plante sur le champ concerné. Je vous mets le code associé,qui est une réduction de mon code original et que j'utilise pour tester le bon encodage:
Pour résumé, dans mon programme je gère des assoss qui ont des liens entre elles.Pour cela je propose dans le menu Saisir,Modifier,Rechercher et Supprimer.Je récupère une définition des tables et une liste maintenance qui m'aidera a faire différents calculs et a le conserver, et j encapsule le tout dans une variable lstmenu que je fournirai a chaque appel de fonction utile. Le code ci-dessus permet de faire la saisie d une nouvelle fiche et après de créer la requête insert qui doit alimenter ma base sqlite3. Mais voila ça plante a cause de l'encodage.
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
19
20
21
22
23
24
25
26
27
28
29
30 choixmenu="" schoixmenu="" maintenance=[schoixmenu,"evenements","2","",choixmenu,"","","True",""] cles=("Num_evnmt","type_evnmt","libelle_evnmt","date_evnmt","lieu_evnmt","participation_evnmt","droit_entree_evnmt","resume_evnmt") libelles=("le numero d ordre","le type","nom de l evenement","la date","le lieu","la participation","le prix","resume") lstmenu=[maintenance,cles,libelles] #--------------------------------------------- lstsaisie_fiche=[] for valeur in lstmenu[2]: donnee=raw_input("Choisir {} :".format(valeur)).strip() while donnee="": donnee=raw_input("Choisir {} :".format(valeur)).strip() lstsaisie_fiche.append(donnee) lstmenu.append(lstsaisie_fiche) #---------------------------------------------- reqsaisir="insert into {} values({})" lien=lstmenu[0][1] phrase="" mot="" index=0 for valeur in lstmenu[3]: if index<len(lstmenu[3])-1: mot+="'"+valeur+"'"+"," else: mot+="'"+valeur+"'" phrase+=mot index+=1 requete=reqsaisir.format(lien,phrase)
Je vous demande de l'aide car malgré mes tests, je n'arrive pas a valider un string propre pour mes requêtes.
Merci bien.
Cordialement
Partager