sey*_*hid 2 python unicode json encode
当我运行 Python 代码并打印(项目)时,出现以下错误:
UnicodeEncodeError: 'UCS-2' codec can't encode characters in position 61-61: Non-BMP character not supported in Tk
Run Code Online (Sandbox Code Playgroud)
这是我的代码:
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"]
Run Code Online (Sandbox Code Playgroud)
我怎样才能解决这个问题?
不知道 的内容很难猜测temp["users"]
,但错误表明它包含非 BMP unicode 字符,例如emoji。
如果您尝试在 IDLE 中显示它,您会立即收到那种错误。重现的简单示例(在 Python 3.5 的 IDLE 上):
>>> 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
Run Code Online (Sandbox Code Playgroud)
(\U0001F600
代表unicode字符U+1F600咧嘴笑脸)
该错误确实是由 Tk 不支持代码大于 FFFF 的 unicode 字符引起的。一个简单的解决方法是将它们从字符串中过滤出来:
def BMP(s):
return "".join((i if ord(i) < 10000 else '\ufffd' for i in s))
Run Code Online (Sandbox Code Playgroud)
'\ufffd'
是 unicode U+FFFD REPLACEMENT CHARACTER的 Python 表示。
我的例子变成:
>>> t = "ab \U0001F600 cd"
>>> print(BMP(t))
ab ? cd
Run Code Online (Sandbox Code Playgroud)
所以你的代码会变成:
for item in temp["users"]:
print(BMP(item))
followers.append(item)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3749 次 |
最近记录: |