Кодек UCS-2 не может кодировать символы в позиции 1050-1050
Когда я запускаю свой код Python, я получаю следующие ошибки:
File "E:\python343\crawler.py", line 31, in <module>
print (x1)
File "E:\python343\lib\idlelib\PyShell.py", line 1347, in write
return self.shell.write(s, self.tags)
UnicodeEncodeError: 'UCS-2' codec can't encode characters in position 1050-1050: Non-BMP character not supported in Tk
Вот мой код:
x = g.request('search', {'q' : 'TaylorSwift', 'type' : 'page', 'limit' : 100})['data'][0]['id']
# GET ALL STATUS POST ON PARTICULAR PAGE(X=PAGE ID)
for x1 in g.get_connections(x, 'feed')['data']:
print (x1)
for x2 in x1:
print (x2)
if(x2[1]=='status'):
x2['message']
Как я могу это исправить?
Ответы
Ответ 1
Ваши данные содержат символы вне базовой многоязычной плоскости. Например, эмодзи находятся за пределами BMP, а оконная система, используемая IDLE, Tk, не может обрабатывать такие символы.
Вы можете использовать таблицу перевода, чтобы сопоставить все, что находится за пределами BMP, с заменяющим символом:
import sys
non_bmp_map = dict.fromkeys(range(0x10000, sys.maxunicode + 1), 0xfffd)
print(x.translate(non_bmp_map))
non_bmp_map
отображает все кодовые точки вне BMP (любая кодовая точка выше 0xFFFF, вплоть до самой высокой кодовой точки Unicode, которую ваша версия Python может обработать) в U + FFFD ЗАМЕНА ХАРАКТЕР:
>>> print('This works outside IDLE! \U0001F44D')
This works outside IDLE! 👍
>>> print('This works in IDLE too! \U0001F44D'.translate(non_bmp_map))
This works in IDLE too! �
Ответ 2
Ни один из них не работал для меня, но следующее. Это предполагает, что public_tweets был извлечен из tweepy api.search
for tweet in public_tweets:
print (tweet.text)
u=tweet.text
u=u.encode('unicode-escape').decode('utf-8')
Ответ 3
эта проблема с юникодом была замечена в python 3.6 и более ранних версиях, чтобы решить ее, просто обновите python до python 3.8 и используйте ваш код. Эта ошибка не возникнет.