web-dev-qa-db-ja.com

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

どうすれば修正できますか?

11
Andi

データに Basic Multilingual Plane 以外の文字が含まれています。たとえば、絵文字は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バージョンがハンドル )から + 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! �
28
Martijn Pieters

これらはどれもうまくいきませんでしたが、以下はうまくいきました。これは、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
Keith Student

このunicodeの問題はpython 3.6およびそれ以前のバージョンで確認されています。これを解決するには、python as python 3.8 andコードを使用してください。このエラーは発生しません。

2
Parika Pandey