У меня проблема с кодировкой переменной пути и вставка ее в базу данных 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'>
Наконец, я получил тип unicode, но у меня все еще есть та же ошибка, которая присутствовала, когда тип переменной пути был str
sqlite3.ProgrammingError: вы не должны использовать 8-битные байты, если вы используете text_factory, который может интерпретировать 8-битные байты (например, text_factory = str). Настоятельно рекомендуется, чтобы вы вместо этого просто переключите свое приложение на строки Unicode.
Не могли бы вы помочь мне решить эту ошибку и объяснить правильное использование функций encode("utf-8")
и unicode()
? Я часто борюсь с ним.
EDIT:
Этот оператор 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