'UCS-2'编解码器无法对位置61-61中的字符进行编码
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了'UCS-2'编解码器无法对位置61-61中的字符进行编码相关的知识,希望对你有一定的参考价值。
当我运行我的Python代码并打印(item)时,我收到以下错误:
UnicodeEncodeError: 'UCS-2' codec can't encode characters in position 61-61: Non-BMP character not supported in Tk
这是我的代码:
def getUserFollowers(self, usernameId, maxid = ''):
if maxid == '':
return self.SendRequest('friendships/'+ str(usernameId) +'/followers/?rank_token='+ self.rank_token,l=2)
else:
return self.SendRequest('friendships/'+ str(usernameId) +'/followers/?rank_token='+ self.rank_token + '&max_id='+ str(maxid))
def getTotalFollowers(self,usernameId):
followers = []
next_max_id = ''
while 1:
self.getUserFollowers(usernameId,next_max_id)
temp = self.LastJson
for item in temp["users"]:
print(item)
followers.append(item)
if temp["big_list"] == False:
return followers
next_max_id = temp["next_max_id"]
我怎样才能解决这个问题?
在不知道temp["users"]
的内容的情况下难以猜测,但错误表明它包含非BMP unicode字符,例如emoji。
如果您尝试在IDLE中显示它,则会立即出现这种错误。重现的简单示例(在ID 3.5 for Python 3.5上):
>>> t = "ab U0001F600 cd"
>>> print(t)
Traceback (most recent call last):
File "<pyshell#5>", line 1, in <module>
print(t)
UnicodeEncodeError: 'UCS-2' codec can't encode characters in position 3-3: Non-BMP character not supported in Tk
(U0001F600
代表unicode角色U + 1F600笑脸)
错误确实是由Tk不支持代码大于FFFF的unicode字符引起的。一个简单的解决方法是从字符串中过滤掉它们:
def BMP(s):
return "".join((i if ord(i) < 10000 else 'ufffd' for i in s))
'ufffd'
是unicode U + FFFD REPLACEMENT CHARACTER的Python表示。
我的例子变成:
>>> t = "ab U0001F600 cd"
>>> print(BMP(t))
ab � cd
所以你的代码将成为:
for item in temp["users"]:
print(BMP(item))
followers.append(item)
以上是关于'UCS-2'编解码器无法对位置61-61中的字符进行编码的主要内容,如果未能解决你的问题,请参考以下文章
'utf-8'编解码器无法解码位置1中的字节0xf4:无效的连续字节
'utf-8'编解码器无法解码位置8的字节0xfc:无效的起始字节
SyntaxError :( unicode错误)'unicodeescape'编解码器无法解码位置2-3的字节:截断 UXXXXXXXX转义[重复]
UnicodeDecodeError:'charmap'编解码器无法解码位置Y中的字节X:字符映射到
UnicodeDecodeError:'utf-8'编解码器无法解码位置1中的字节0x8b:无效的起始字节
UnicodeEncodeError:'mbcs'编解码器无法编码位置0--1中的字符:运行PyInstaller编译的脚本时无效字符