J'ai un problème avec le codage de la variable de chemin et son insertion dans la base de données SQLite . J'ai essayé de le résoudre avec la fonction d' encode ("utf-8") qui n'a pas aidé. Ensuite, j'ai utilisé la fonction unicode () qui me donne le type unicode .
print type(path) # <type 'unicode'>
path = path.replace("one", "two") # <type 'str'>
path = path.encode("utf-8") # <type 'str'> strange
path = unicode(path) # <type 'unicode'>
Enfin, j'ai gagné le type unicode , mais j'ai toujours la même erreur qui était présente lorsque le type de la variable de chemin était str
sqlite3.ProgrammingError: Vous ne devez pas utiliser de chaînes d'octets 8 bits, sauf si vous utilisez une text_factory qui peut interpréter des chaînes d'octets 8 bits (comme text_factory = str). Il est fortement recommandé de simplement basculer votre application vers des chaînes Unicode.
Pourriez-vous m'aider à résoudre cette erreur et expliquer l'utilisation correcte de encode("utf-8")
et des unicode()
fonctions? Je me bats souvent avec.
ÉDITER:
Cette instruction execute () a généré l'erreur:
cur.execute("update docs set path = :fullFilePath where path = :path", locals())
J'ai oublié de changer l'encodage de la variable fullFilePath qui souffre du même problème, mais je suis assez confus maintenant. Dois-je utiliser uniquement unicode () ou encoder ("utf-8") ou les deux?
Je ne peux pas utiliser
fullFilePath = unicode(fullFilePath.encode("utf-8"))
car cela soulève cette erreur:
UnicodeDecodeError: le codec 'ascii' ne peut pas décoder l'octet 0xc5 en position 32: ordinal pas dans la plage (128)
La version Python est 2.7.2