Есть несколько вариантов в codecs
модуля в STDLIB питона, в зависимости от того, как вы хотите, расширенные символы обрабатываются:.
>>> import codecs
>>> u = u'nästy chäräctörs with å and co.'
>>> encode = codecs.get_encoder('ascii')
>>> encode(u)
'
Traceback (most recent call last):
File "<stdin>", line 1, in ?
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe4' in position 1: ordinal not in range(128)
>>> encode(u, 'ignore')
('nsty chrctrs with and co.', 31)
>>> encode(u, 'replace')
('n?sty ch?r?ct?rs with ? and co.', 31)
>>> encode(u, 'xmlcharrefreplace')
('nästy chäräctörs with å and co.', 31)
>>> encode(u, 'backslashreplace')
('n\\xe4sty ch\\xe4r\\xe4ct\\xf6rs with \\xe5 and co.', 31)
Надеюсь, один из тех, кто будет отвечать вашим потребностям Там больше информации в Python codecs module documentation
.
У ascii нет å ä ö и других, вы хотите что-то еще, например. iso 8859-1 (латинский-1) или utf-8? – nos
Мне, вероятно, придется немного переформулировать вопрос. Я столкнулся с проблемой при разработке тега шаблона для Django. Я заметил, что он работает очень хорошо при использовании обычных строк, но сбой при использовании точно подобной строки юникода. –
Ваша верхняя строка не является формой UTF. UTF - кодировки в кодировке unicode, что означает, что они представляют собой последовательности байтов, которые представляют символы Unicode. То, что у вас есть, представляет собой строку юникода, которая представляет собой последовательность символов. Количество байтов в каждом случае не имеет значения и невозможно определить изнутри python. Различие - не просто педантизм. Понимание того, что делает python с вашим текстом, поможет вам избежать этих досадных 'Unicode {En, De} codeError's. – jcdyer