在python中将字符串列表转换为unicode字符

时间:2012-03-04 02:53:11

标签: python facebook unicode facebook-fql

我的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'\ u016​​9'进行编码    7:字符映射到

如果你帮我解决这个问题,请提前致谢! :)

3 个答案:

答案 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终端上正确显示(当然,只要字体支持字符)。