Преобразовать список строк в символы Unicode в Python - PullRequest
0 голосов
/ 04 марта 2012

Мой код Python с использованием API Facebook для запроса информации о пользователе. И имя может содержать символы 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, в кодировке вернуть codecs.charmap_encode (ввод, ошибки, кодировка_карты) UnicodeEncodeError: кодек 'charmap' не может кодировать символ u '\ u0169' в позиции 7: персонаж отображается на

Заранее спасибо, если вы поможете мне это исправить! :)

Ответы [ 3 ]

0 голосов
/ 04 марта 2012

Проблема в том, что ваша консоль не поддерживает один или несколько символов, которые вы получаете. Вы можете выполнить chcp 65001, чтобы консоль поддерживала UTF-8 (и в качестве дополнительного бонуса вам не нужно кодировать вручную), но это может отрицательно сказаться на других программах, запускаемых из той же консоли.

0 голосов
/ 04 марта 2012

Самое простое решение - использовать IDE с поддержкой UTF-8, например Pythonwin, который поставляется с расширениями pywin32 .Оставьте свои строки в Unicode и просто напечатайте их, и они будут правильно отображаться на терминале UTF-8 (конечно, если шрифт поддерживает символы).

0 голосов
/ 04 марта 2012

Быстрый и грязный ответ - использовать 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]) - этокодируя шаблон до , произошла любая замена строки.Скорее всего, это не то, что вы хотели.

...