У мене проблема з кодуванням змінної шляху та її вставкою до бази даних SQLite . Я намагався вирішити це за допомогою функції encode ("utf-8"), яка не допомогла. Потім я використав функцію unicode (), яка дає мені тип 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'>
Нарешті я отримав тип юнікоду , але я все ще маю ту саму помилку, яка була присутня, коли типом змінної шляху був str
sqlite3.ProgrammingError: Ви не повинні використовувати 8-бітові bytestring, якщо не використовуєте text_factory, який може інтерпретувати 8-бітні bytestrings (наприклад, text_factory = str). Настійно рекомендується замість цього просто переключити програму на рядки Unicode.
Не могли б ви допомогти мені вирішити цю помилку та пояснити правильне використання encode("utf-8")
та unicode()
функцій? Я часто борюся з цим.
РЕДАГУВАТИ:
Цей оператор execute () викликав помилку:
cur.execute("update docs set path = :fullFilePath where path = :path", locals())
Я забув змінити кодування змінної fullFilePath, яка страждає від тієї ж проблеми, але зараз я дуже заплутався. Чи слід використовувати лише Unicode () або encode ("utf-8"), або обидва?
Я не можу використовувати
fullFilePath = unicode(fullFilePath.encode("utf-8"))
тому що це викликає цю помилку:
UnicodeDecodeError: кодек 'ascii' не може декодувати байт 0xc5 у положенні 32: порядковий номер не в діапазоні (128)
Версія Python - 2.7.2