Рассмотрим следующий пример:
>>> s = u"баба"
>>> s
u'\xe1\xe0\xe1\xe0'
>>> print s
áàáà
Я использую кодировку cp1251
в режиме ожидания, но она похоже, что интерпретатор на самом деле использует latin1
для создания строки Unicode:
>>> print s.encode('latin1')
баба
Почему так? Есть ли спецификация для такого поведения?
CPython, 2.7.
Править
На самом деле я искал код
>>> u'\xe1\xe0\xe1\xe0' == u'\u00e1\u00e0\u00e1\u00e0'
True
Похоже, что при кодировании юникода с помощью кодека latin1
все точки юникода меньше 256 просто оставляются как есть, что приводит к получению байтов, которые я набрал раньше.