Ответ 1
Вы также можете печатать объекты Unicode, вам не нужно делать str() вокруг него.
Предполагая, что вам действительно нужна str:
Когда вы выполняете str (u '\ u2013'), вы пытаетесь преобразовать строку Unicode в 8-битную строку. Для этого вам нужно использовать кодировку, сопоставление данных Unicode с 8-битными данными. Что делает str(), это то, что использует кодировку по умолчанию системы, которая под Python 2 является ASCII. ASCII содержит только 127 первых кодовых точек Unicode, то есть от \u0000 до\u007F1. В результате вы получаете вышеуказанную ошибку, кодек ASCII просто не знает, что такое \u2013 (это длинный тире, кстати).
Поэтому вам нужно указать, какую кодировку вы хотите использовать. Обычными являются ISO-8859-1, наиболее известный как Latin-1, который содержит 256 первых кодовых точек; UTF-8, который может кодировать все кодовые точки с использованием кодирования с переменной длиной, CP1252, который является общим для Windows, и различными китайскими и японскими кодировками.
Вы используете их следующим образом:
u'\u2013'.encode('utf8')
Результатом является str, содержащая последовательность байтов, которая представляет собой представление uTF8 рассматриваемого символа:
'\xe2\x80\x93'
И вы можете распечатать его:
>>> print '\xe2\x80\x93'
–