Verwendung von unicode () und encode () Funktionen in Python

Ich habe ein Problem mit der Verschlüsselung der Pfadvariablen und das Einfügen in die SQLite- Datenbank. Ich habe versucht, es mit encode ("utf-8") Funktion zu lösen, die nicht half. Dann habe ich unicode () Funktion benutzt, 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 gewonnen, aber ich habe immer noch den gleichen Fehler, der vorhanden war, wenn der Typ der Pfadvariable str war

Sqlite3.ProgrammingError: Sie dürfen keine 8-Bit-Bytestringe verwenden, es sei denn, Sie verwenden eine text_factory, die 8-Bit-Bytestrings interpretieren kann (wie text_factory = str). Es wird dringend empfohlen, dass Sie stattdessen einfach Ihre Anwendung auf Unicode-Strings umstellen.

Könnten Sie mir helfen, diesen Fehler zu lösen und die korrekte Verwendung von encode("utf-8") und unicode() Funktionen zu erklären? Ich kämpfe oft damit.

BEARBEITEN:

Diese execute () – Anweisung hat den Fehler aufgerufen:

 cur.execute("update docs set path = :fullFilePath where path = :path", locals()) 

Ich habe vergessen, die Verschlüsselung von fullFilePath Variable zu ändern, die mit dem gleichen Problem leidet, aber ich bin jetzt ziemlich verwirrt. Soll ich nur Unicode () oder Codierung ("utf-8") oder beides verwenden?

Ich kann nicht verwenden

 fullFilePath = unicode(fullFilePath.encode("utf-8")) 

Weil es diesen Fehler auslöst:

UnicodeDecodeError: 'ascii' Codec kann das Byte 0xc5 nicht in Position 32 decodieren: ordinal nicht im Bereich (128)

Python Version ist 2.7.2

2 Solutions collect form web for “Verwendung von unicode () und encode () Funktionen in Python”

Sie verwenden encode("utf-8") falsch. Python-Byte-Strings ( str Typ) haben eine Codierung, Unicode nicht. Sie können einen Unicode-String in einen Python-Byte-String mit uni.encode(encoding) konvertieren, und Sie können einen Byte-String in einen Unicode-String mit s.decode(encoding) (oder äquivalent, unicode(s, encoding) umwandeln).

Wenn fullFilePath und path derzeit ein str Typ sind, solltest du herausfinden, wie sie codiert sind. Zum Beispiel, wenn die aktuelle Kodierung utf-8 ist, würden Sie verwenden:

 path = path.decode('utf-8') fullFilePath = fullFilePath.decode('utf-8') 

Wenn dies nicht behoben wird, kann das eigentliche Problem sein, dass Sie nicht mit einem Unicode-String in Ihrem execute() Aufruf verwenden, versuchen Sie es auf die folgenden:

 cur.execute(u"update docs set path = :fullFilePath where path = :path", locals()) 

str ist Textdarstellung in Bytes, unicode ist Textdarstellung in Zeichen.

Sie decodieren Text von Bytes zu Unicode und kodieren einen Unicode in Bytes mit einigen Codierungen.

Das ist:

 >>> 'abc'.decode('utf-8') # str to unicode u'abc' >>> u'abc'.encode('utf-8') # unicode to str 'abc' 
  • Lesen von russischen Sprachdaten aus csv
  • Python NLTK: SyntaxError: Nicht-ASCII-Zeichen '\ xc3' in Datei (Senitment Analysis -NLP)
  • Python: Finden Sie gleichwertiges Surrogat-Paar von Nicht-BMP Unicode Char
  • Qpython Unicode Strings
  • Was bedeutet 'du' in einer Liste?
  • Wie man einen Unicode csv in Python 2.7 schreibt
  • Python3 - ascii / utf-8 / iso-8859-1 kann das Byte 0xe5 nicht dekodieren (schwedische Zeichen)
  • Wie kann ich JSON Prozent-Codierung vermeiden und \ u-escaping?
  • Python: Unicode in ASCII ohne Fehler umwandeln
  • Matching nur ein Unicode-Brief in Python re
  • Kratzen einer Website, deren Encodierung iso-8859-1 statt utf-8 ist: Wie kann ich den richtigen Unicode in meiner Datenbank speichern?
  • Python ist die beste Programmiersprache der Welt.