OVH Cloud OVH Cloud

Pysqlite et Unicode

3 réponses
Avatar
weisse.armand
Bonjour, et mes excuses si ce sujet a été abordé mille fois, mais je m'
enlise

Comment stocker et afficher des caratères accentués français dans une base
sqlite .

Après un test j'ai le message d'erreur suivant

pysqlite2.dbapi2.OperationsError: Could not decode to UTF-8 column

D'après la doc de pysql , il y a moyen de forcer à unicode (par
**text_factory** ) mais où mettre cette option ?

Je précise que mon code débute par: # _*_ coding:iso-8859-1 _*_


Pouvez vous me donner une réponse et une solution rapide et simple, n'étant
pas un spécialiste ?

Merci

3 réponses

Avatar
jean-michel bain-cornu
Bonjour,
Bonjour, et mes excuses si ce sujet a été abordé mille fois, mais je m'
enlise
C'est effectivement un pb qu'on rencontre souvent, et qui n'est pas

toujours marrant à résoudre.

Comment stocker et afficher des caratères accentués français dans une base
sqlite .

Après un test j'ai le message d'erreur suivant

pysqlite2.dbapi2.OperationsError: Could not decode to UTF-8 column
Serait-il possible d'avoir le message complet, avec la ligne de ton code

qui provoque l'erreur, et le contenu de la chaîne incriminée ?
Le contexte d'exécution est important aussi (les versions et tout le
tintouin)

A+
jm

Avatar
Mickaël Delahaye
pysqlite2.dbapi2.OperationsError: Could not decode to UTF-8 column

D'après la doc de pysql , il y a moyen de forcer à unicode (par **tex t_factory** ) mais où mettre cette option ?

Je précise que mon code débute par: # _*_ coding:iso-8859-1 _*_


Cela indique quel encodage est utilisé pour les chaînes Unicode (par
exemple u"éveillé" ) de Python pour les chaînes simples (eg
"n'importe
quoi").

PySqlite a besoin de chaîne Unicode (le type TEXT par défaut est en
Unicode), il essaye donc de convertir ta chaîne simple en Unicode :
unicode("étienne") --> erreur
En effet, Python pense qu'une chaîne simple est en ASCII (sans
accents)... ce qui lève une exception plus ou moins bien retranscris
par PySqlite.

Comme ton code débute par # coding:iso-8859-1, tu dois juste rajouté
un
u devant les chaînes que tu fournis à PySqlite.

Cordialement,

Mickaël Delahaye

Avatar
Yves Lange
pysqlite2.dbapi2.OperationsError: Could not decode to UTF-8 column

D'après la doc de pysql , il y a moyen de forcer à unicode (par **text_factory** ) mais où mettre cette option ?

Je précise que mon code débute par: # _*_ coding:iso-8859-1 _*_


Cela indique quel encodage est utilisé pour les chaînes Unicode (par
exemple u"éveillé" ) de Python pour les chaînes simples (eg
"n'importe
quoi").

PySqlite a besoin de chaîne Unicode (le type TEXT par défaut est en
Unicode), il essaye donc de convertir ta chaîne simple en Unicode :
unicode("étienne") --> erreur
En effet, Python pense qu'une chaîne simple est en ASCII (sans
accents)... ce qui lève une exception plus ou moins bien retranscris
par PySqlite.

Comme ton code débute par # coding:iso-8859-1, tu dois juste rajouté
un
u devant les chaînes que tu fournis à PySqlite.

Cordialement,

Mickaël Delahaye

Exemple:

a = u"hello"

++