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