Использование функций unicode () и encode () в Python


у меня проблема с кодировкой путь переменная и вставка ее в SQLite

3 70

3 ответа:

вы используете encode("utf-8") неправильно. В Python байт строки (str type) имеют кодировку, Unicode - нет. Вы можете преобразовать строку Unicode в байтовую строку Python с помощью uni.encode(encoding), и вы можете преобразовать строку байта в строку Юникода с помощью s.decode(encoding) (или, что эквивалентно, unicode(s, encoding)).

если fullFilePath и path в настоящее время a str тип, вы должны выяснить, как они кодируются. Например, если текущая кодировка UTF-8, вы бы использование:

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

если это не исправить, фактическая проблема может заключаться в том, что вы не используете строку Unicode в своем execute() позвоните, попробуйте изменить его на следующее:

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

str - это текстовое представление в байтах,unicode - это текстовое представление в символах.

вы декодируете текст из байтов в Юникод и кодируете Юникод в байты с некоторой кодировкой.

что есть:

>>> 'abc'.decode('utf-8')  # str to unicode
u'abc'
>>> u'abc'.encode('utf-8') # unicode to str
'abc' 

убедитесь, что вы установили свои настройки локали прямо перед запуском скрипта из оболочки, например

$ locale -a | grep "^en_.\+UTF-8"
en_GB.UTF-8
en_US.UTF-8
$ export LC_ALL=en_GB.UTF-8
$ export LANG=en_GB.UTF-8

Docs:man locale,man setlocale.