我的python代码使用facebook API来请求用户的信息。名称可以包含Unicode字符:
# -*- coding: utf-8 -*-
from facebook import Facebook
def desktop_app():
# Get api_key and secret_key from a file
facebook = Facebook('x', 'xx')
facebook.auth.createToken()
# Show login window
facebook.login()
# Login to the window, then press enter
print 'After logging in, press enter...'
raw_input()
facebook.auth.getSession()
info = facebook.users.getInfo([facebook.uid], [u'name', 'birthday', 'affiliations', 'sex'])[0]
for attr in info:
print '%s: %s'.encode('ascii') % (attr, info[attr])
friends = facebook.friends.get()
friends = facebook.users.getInfo(friends[0:5], [u'name', 'birthday', 'relationship_status'])
for friend in friends:
if 'birthday' in friend:
print friend['name'].encode('utf8'), 'has a birthday on', friend['birthday'], 'and is', friend['relationship_status']
else:
print friend['name'].encode('utf8'), 'has no birthday and is', friend['relationship_status']
arefriends = facebook.friends.areFriends([friends[0]['uid']], [friends[1]['uid']])
if __name__ == "__main__":
desktop_app()
当Facebook名称包含Unicode字符时,我收到此错误:
文件“C:\ Python27 \ lib \ encodings \ cp437.py”,第12行,编码 return codecs.charmap_encode(input,errors,encoding_map) UnicodeEncodeError:'charmap'编解码器无法对字符u'\ u0169'进行编码 7:字符映射到
如果你帮我解决这个问题,请提前致谢! :)
答案 0 :(得分:0)
快速而肮脏的答案是使用somestring.encode('ascii', 'ignore')
来处理意外字符。
我怀疑你的代码有更深层次的问题。如果您要打印真正的unicode字符串,则不必先对它们进行编码(否则,在打印到达它们之前它们的含义将会丢失):
>>> print u'ba\u0169er' # no encode or decode is needed to print
baũer
此外,行print '%s: %s'.encode('ascii') % (attr, info[attr])
在发生任何字符串替换之前编码模板。这可能不是你想要的。
答案 1 :(得分:0)
问题是您的控制台不支持您收到的一个或多个字符。您可以执行chcp 65001
以使控制台支持UTF-8(并且作为副作用,您不必手动编码),但这可能会对从同一控制台运行的其他程序产生负面影响。< / p>
答案 2 :(得分:0)
最简单的解决方案是使用支持UTF-8的IDE,例如pywin32扩展名附带的Pythonwin
。将字符串保留为Unicode并打印它们,它们将在UTF-8终端上正确显示(当然,只要字体支持字符)。