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,

Другие вопросы по тегам