'UCS-2'编解码器无法对1050-1050位置的字符进行编码

时间:2015-09-07 16:10:03

标签: python unicode encoding ucs2

当我运行我的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']

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:26)

您的数据包含Basic Multilingual Plane以外的字符。例如,表情符号在BMP之外,IDLE,Tk使用的窗口系统无法处理这些字符。

您可以使用translation table将BMP之外的所有内容映射到replacement character

.env

import sys non_bmp_map = dict.fromkeys(range(0x10000, sys.maxunicode + 1), 0xfffd) print(x.translate(non_bmp_map)) 将BMP之外的所有代码点(任何高于0xFFFF的代码点,一直到highest Unicode codepoint your Python version can handle)映射到U+FFFD REPLACEMENT CHARACTER

non_bmp_map

答案 1 :(得分: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')

答案 2 :(得分:2)

此unicode问题已在python 3.6和更早版本中出现,要解决此问题,只需将python升级为python 3.8并使用您的代码即可。