UnicodeDecodeError: кодек "utf-8" не может декодировать байт 0xe2 в позиции 105: недопустимый байт продолжения
Мой код в значительной степени следующий:
import sqlitefts as fts
connection = apsw.Connection('texts.db', flags=apsw.SQLITE_OPEN_READWRITE)
c = connection.cursor()
def do_search(query):
c.execute('SELECT title, book, author, link, snippet(text_idx) FROM text_idx WHERE text_idx MATCH 'possumus';') #in this case query='possumus'
c.fetchall()
--display the results on html--
запрос работает, если я ищу более одного слова. Но когда я выполняю поиск по одному слову, это вызывает ошибку декодирования.
Запросы, которые не работают, похожи на следующие:
поиск одного слова, как -
SELECT title, book, author, link, snippet(text_idx)
FROM text_idx
WHERE text_idx MATCH 'possumus';
ИЛИ ищет как
SELECT title, book, author, link, snippet(text_idx)
FROM text_idx
WHERE text_idx MATCH 'quam OR Galliae';
Трассировка стека:
Traceback (most recent call last):
File "/usr/local/lib/python3.5/dist-packages/flask/app.py", line 1997, in __call__
return self.wsgi_app(environ, start_response)
File "/usr/local/lib/python3.5/dist-packages/flask/app.py", line 1985, in wsgi_app
response = self.handle_exception(e)
File "/usr/local/lib/python3.5/dist-packages/flask/app.py", line 1540, in handle_exception
reraise(exc_type, exc_value, tb)
File "/usr/local/lib/python3.5/dist-packages/flask/_compat.py", line 33, in reraise
raise value
File "/usr/local/lib/python3.5/dist-packages/flask/app.py", line 1982, in wsgi_app
response = self.full_dispatch_request()
File "/usr/local/lib/python3.5/dist-packages/flask/app.py", line 1614, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/usr/local/lib/python3.5/dist-packages/flask/app.py", line 1517, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/usr/local/lib/python3.5/dist-packages/flask/_compat.py", line 33, in reraise
raise value
File "/usr/local/lib/python3.5/dist-packages/flask/app.py", line 1612, in full_dispatch_request
rv = self.dispatch_request()
File "/usr/local/lib/python3.5/dist-packages/flask/app.py", line 1598, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/home/ramcharran/phyllo/search/app.py", line 123, in search
r = do_search(query)
File "/home/ramcharran/phyllo/search/app.py", line 90, in do_search
r1 = c.fetchall()
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe2 in position 105: invalid continuation byte
Запрос работает нормально, если я не использую snippet()
функция в моем запросе.
2 ответа
Я думаю, что проблема связана с кодированием. Может быть, есть специальные символы в столбце text_idx Попробуйте поставить:
# Coding: latin1
в начале вашего файла. Вы должны заменить latin1 кодировкой, соответствующей вашему случаю. Я надеюсь, что помог.
В ваших данных могут быть специальные символы. Попробуйте закодировать вашу базу данных в utf-8
,