Python mmh3: UnicodeEncodeError: кодек «ascii» не может кодировать символы в позиции 0-14: порядковый номер не в диапазоне (128) - PullRequest
0 голосов
/ 26 августа 2018

Я запрашиваю базу данных для шуток и получаю обратно Python str s.Я хочу использовать их как объекты Unicode, поэтому я делаю:

joke = unicode(joke, 'utf-8')

Это работает для всех результатов моей БД и не вызывает никаких проблем.

Затем я пытаюсь хешировать каждое слово вкаждая шутка такова:

result = mmh3.hash(joke)

и я получаю ответ:

UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-14: ordinal not in range(128)

Я проверил текст, и он на японском языке.Означает ли это, что я должен отбросить все символы не ascii перед хэшированием или есть лучший способ справиться с этим?

Спасибо!

1 Ответ

0 голосов
/ 26 августа 2018

Для функции .hash(...) требуется либо bytes, либо ascii -конвертируемый текст.

Самый простой способ (если вы имеете дело с unicode объектами) - это преобразовать их в bytes, как вы называете mmh3.hash:

result = mmh3.hash(joke.encode('UTF-8'))
...