Объект Python unicode
- это последовательность кодовых точек Unicode и по определению собственно Unicode. Строка python str
представляет собой последовательность байтов, которые могут быть символами Unicode, закодированными с определенной кодировкой (UTF-8, Latin-1, Big5, ...).
Первый вопрос возникает, если source
это объект unicode
или строка str
.
То, что source.encode("utf-8")
работает, означает, что вы можете преобразовать source
в строку в кодировке UTF-8, но делаете ли вы это перед тем, как передать ее в функцию базы данных? База данных, похоже, ожидает, что ее входные данные будут закодированы с помощью UTF-8, и жалуется, что эквивалент source.decode("utf-8")
не срабатывает.
Если source
является unicode
объектом, он должен быть закодирован в UTF-8, прежде чем передать его в базу данных:
source = u'abc'
call_db(source.encode('utf-8'))
Если source
- это str
, закодированный как-то иначе, чем Utf-8, вы должны декодировать это кодирование и затем кодировать полученный объект Unicode в UTF-8:
source = 'abc'
call_db(source.decode('Big5').encode('utf-8'))