0

Я использую python 2.7.10.python u ' u00b0' возвращает u ' xb0'. Зачем?

При работе с кодировкой символов и после прочтения большого количества переполнения стека и т. Д. По этому вопросу я столкнулся с таким поведением, которое выглядит странно для меня. Python интерпретатор ввод

>>>u'\u00b0' 

приводит следующий вывод:

u'\xb0' 

Я мог бы повторить это поведение, используя окно DOS, простой консоль, и крыло-язь питон оболочку.

Мои предположения (исправьте меня, если я ошибаюсь): «символ степени» имеет unicode 0x00b0, utf-8 код 0xc2b0, код латинского 1 0xb0. Python doc говорит, что строковый литерал с u-префиксом кодируется с использованием юникода.

Вопрос: Почему результат преобразован в строковый литерал в формате Юникод с помощью последовательности байтов-escape-последовательности, которая соответствует кодировке латинского-1, вместо сохранения последовательности escape-кода юникода?

Заранее благодарим за любую помощь.

ответ

0

Python использует некоторые правила для определения того, что выводить из repr для каждого символа. Правило для кодовых обозначений символов Unicode в диапазоне от 0x0080 до 0x00ff должно использовать последовательность \xdd, где dd - это шестнадцатеричный код, по крайней мере, на Python 2. Невозможно изменить его. В Python 3 все печатные символы будут отображаться без преобразования в шестнадцатеричный код.

Что касается того, почему это похоже на кодировку Latin-1, это потому, что Unicode начал с Latin-1 в качестве базы. Все кодовые точки до 0xff соответствуют их аналогу Latin-1.