2015-09-07 3 views
6

Когда я запускаю мой код Python, я получаю следующие ошибки:кодек 'UCS-2' не может кодировать символы в позиции 1050-1050

File "E:\python343\crawler.py", line 31, in <module> 
    print (x1) 
    File "E:\python343\lib\idlelib\PyShell.py", line 1347, in write 
    return self.shell.write(s, self.tags) 
UnicodeEncodeError: 'UCS-2' codec can't encode characters in position 1050-1050: Non-BMP character not supported in Tk 

Вот мой код:

x = g.request('search', {'q' : 'TaylorSwift', 'type' : 'page', 'limit' : 100})['data'][0]['id'] 

# GET ALL STATUS POST ON PARTICULAR PAGE(X=PAGE ID) 
for x1 in g.get_connections(x, 'feed')['data']: 
    print (x1) 
    for x2 in x1: 
     print (x2) 
     if(x2[1]=='status'): 
      x2['message'] 

Как я могу это исправить?

+0

Если вам нужно увидеть символы без символов BMP; вы можете запускать python в интерактивном режиме в среде, которая может отображать их, например, в консоли ConEmu или в веб-браузере. Попробуйте [ipython notebook] (http://ipython.org/notebook.html). – jfs

ответ

17

Ваши данные содержат символы за пределами Basic Multilingual Plane. Например, Emoji находятся за пределами BMP, а оконная система, используемая IDLE, Tk, не может обрабатывать такие символы.

Вы можете использовать translation table отобразить все за пределами BMP в replacement character:

import sys 
non_bmp_map = dict.fromkeys(range(0x10000, sys.maxunicode + 1), 0xfffd) 
print(x.translate(non_bmp_map)) 

non_bmp_map отображает все кодовые вне BMP (любой элемент кода выше, чем 0xFFFF, вплоть до highest Unicode codepoint your Python version can handle) до U+FFFD REPLACEMENT CHARACTER:

>>> print('This works! \U0001F44D') 
This works! 
>>> print('This works! \U0001F44D'.translate(non_bmp_map)) 
This works! � 
+0

Спасибо, но после добавления их появляется новая ошибка: print (x1.translate (non_bmp_map)) AttributeError: объект 'dict' не имеет атрибута 'translate', поэтому как это сделать? – Andi

+1

@Andi: 'x1' - это не строка, а словарь. В этом случае вы можете сделать 'str (x1) .translate (non_bmp_map)'. –

+0

Он работает, большое вам спасибо. – Andi