web-dev-qa-db-fra.com

Le codec 'UCS-2' ne peut pas coder les caractères en position 1050-1050

Lorsque j'exécute mon Python, j'obtiens les erreurs suivantes:

  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

Voici mon code:

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']

Comment puis-je réparer cela?

11
Andi

Vos données contiennent des caractères en dehors de Plan multilingue de base . Les Emoji par exemple, sont en dehors du BMP, et le système de fenêtres utilisé par IDLE, Tk, ne peut pas gérer de tels caractères.

Vous pouvez utiliser un table de traduction pour tout mapper en dehors du BMP au caractère de remplacement :

import sys
non_bmp_map = dict.fromkeys(range(0x10000, sys.maxunicode + 1), 0xfffd)
print(x.translate(non_bmp_map))

Le non_bmp_map mappe tous les points de code en dehors de BMP (tout point de code supérieur à 0xFFFF, jusqu'au point de code Unicode le plus élevé Python peut poignée ) à + FFFD REMPLACEMENT CHARACTER :

>>> 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! �
28
Martijn Pieters

Rien de tout cela n'a fonctionné pour moi, mais ce qui suit fonctionne. Cela suppose que public_tweets a été extrait de tweepy api.search

for Tweet in public_tweets:
    print (Tweet.text)
    u=Tweet.text
    u=u.encode('unicode-escape').decode('utf-8')
3
Keith Student

ce problème unicode a été observé dans python 3.6 et versions antérieures, pour le résoudre, il suffit de mettre à niveau python as python 3.8 et utilisez votre code. Cette erreur ne se produira pas.

2
Parika Pandey