2015-10-27 2 views
0

Я использую reddit-flair-bot для моего subreddit.Unicode Ошибка при попытке обработать пустой текст символа в PRAW

Если вы не знакомы с этим, это питон скрипт, который обрабатывает входящие PMs от пользователей, где он принимает тему как класс чутье и содержание ПМ как текст чутье.

Это всего лишь немного контекста, но вот важная часть - по умолчанию вы не можете отправить пустой PM на reddit. Это означает, что пользователи должны иметь текст при отправке PM (что означает, что они также должны иметь текст рядом с их именем).

Мы недавно нашли обходной путь к этой проблеме, где вместо этого вы можете вставить пустой символ, и он будет идентифицирован как символ (поэтому PM отправит), но он будет отображаться как ничего рядом с вашим именем , Я говорю о фактическом пустом символе, а не о пустоте (alt+0143 и alt+0173 соответствуют этим критериям).

Проблема в том, что бот использует PRAW, и PRAW, похоже, не может обнаружить пустой символ Юникода. Таким образом, скрипт работает неправильно.

Он поставляется с ошибкой:

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

Есть ли способ обойти это? Надеюсь, я ясно объяснил свою ситуацию.

+0

При включении сообщения об ошибке Python обычно полезно отображать весь стек вызовов. Это облегчает определение, откуда исходит ошибка. –

+0

@MarkRansom Что-то вроде [this?] (Https://i.imgur.com/24MGL08.png) – antonlab

+0

Точно, хотя было бы лучше, если бы вы скопировали/вставляли непосредственно в вопрос. Он указывает, что ошибка возникает в 'logfile.write', которая говорит мне, что это файл текстового режима, в котором вы не указали кодировку. –

ответ

0

ALT + 0143 является и '\ u008f'

ALT + 0143 является и '\ u00ad' # мягкий hypen

Используйте выше юникода код точки для представления символов в коде, а затем закодировать их используя «utf-8» перед их отправкой.

>>> aa = u'\u008f' 
>>> aa_str = aa.encode('utf-8') 
>>> aa_str 
'\xc2\x8f' 

Теперь используйте aa_str для передачи.

Смежные вопросы