Mam problem z zakodowaniem zmiennej ścieżki i wstawieniem jej do bazy SQLite . Próbowałem to rozwiązać za pomocą funkcji kodowania („utf-8”), która nie pomogła. Następnie użyłem funkcji unicode (), która daje mi typ 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'>
Wreszcie uzyskałem typ unicode , ale nadal mam ten sam błąd, który był obecny, gdy typ zmiennej ścieżki to str
sqlite3.ProgrammingError: Nie możesz używać 8-bitowych bajtów, chyba że używasz text_factory, który może interpretować 8-bitowe bajty (jak text_factory = str). Zdecydowanie zaleca się, aby zamiast tego po prostu przełączyć aplikację na ciągi znaków Unicode.
Czy możesz mi pomóc rozwiązać ten błąd i wyjaśnić prawidłowe użycie encode("utf-8")i unicode()funkcje? Często z tym walczę.
EDYTOWAĆ:
Ta instrukcja execute () spowodowała błąd:
cur.execute("update docs set path = :fullFilePath where path = :path", locals())
Zapomniałem zmienić kodowanie zmiennej fullFilePath , która cierpi na ten sam problem, ale jestem teraz dość zdezorientowany. Należy używać tylko unicode () lub kodowanie ( "UTF-8") lub obu?
Nie mogę użyć
fullFilePath = unicode(fullFilePath.encode("utf-8"))
ponieważ wywołuje ten błąd:
UnicodeDecodeError: kodek „ascii” nie może zdekodować bajtu 0xc5 na pozycji 32: numer porządkowy poza zakresem (128)
Wersja Pythona to 2.7.2