Ich habe ein Problem mit der Codierung des Pfades variabel und an die Einfügen von SQLite - Datenbank. Ich habe versucht, es mit der Codierungsfunktion ("utf-8") zu lösen, was nicht geholfen hat. Dann habe ich die Funktion unicode () verwendet, die mir den Typ unicode gibt .
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'>
Schließlich habe ich Unicode - Typ, aber ich habe immer den gleichen Fehler haben , die vorhanden war , als der Typ der Pfad - Variable war str
sqlite3.ProgrammingError: Sie dürfen keine 8-Bit-Bytestrings verwenden, es sei denn, Sie verwenden eine text_factory, die 8-Bit-Bytestrings interpretieren kann (wie text_factory = str). Es wird dringend empfohlen, stattdessen nur Ihre Anwendung auf Unicode-Zeichenfolgen umzustellen.
Können Sie mir helfen, diesen Fehler zu beheben und die korrekte Verwendung encode("utf-8")
und unicode()
Funktionen zu erklären ? Ich kämpfe oft damit.
BEARBEITEN:
Diese execute () - Anweisung hat den Fehler ausgelöst:
cur.execute("update docs set path = :fullFilePath where path = :path", locals())
Ich habe vergessen, die Codierung der Variablen fullFilePath zu ändern, die unter demselben Problem leidet, bin aber jetzt ziemlich verwirrt. Sollte ich nur Unicode () oder Encode ("utf-8") oder beides verwenden?
Ich kann nicht verwenden
fullFilePath = unicode(fullFilePath.encode("utf-8"))
weil es diesen Fehler auslöst:
UnicodeDecodeError: Der Codec 'ascii' kann das Byte 0xc5 an Position 32 nicht dekodieren: Ordnungszahl nicht im Bereich (128)
Die Python- Version ist 2.7.2