Байт Unicode против кодовой точки (Python)

В http://nedbatchelder.com/text/unipain.html поясняется, что:

В Python 2 есть два разных типа строковых данных. Обычный строковый литерал дает вам объект "str", в котором хранятся байты. Если вы используете префикс «u», вы получаете объект «unicode», в котором хранятся кодовые точки.

В чем разница между кодовой точкой и байтом? (Я думаю не о Python как таковом, а о концепции в целом). По сути, это просто набор битов, верно? Я думаю, что старый строковый литерал боли рассматривает каждые 8 ​​бит как байт и обрабатывается как таковой, и мы интерпретируем байт как целые числа, и это позволяет нам отображать его в ASCII и расширенных наборах символов. В чем разница между интерпретацией целого числа как этого набора символов и интерпретацией «кодовой точки» как символов Unicode? В нем говорится, что объект Unicode Python хранит «кодовую точку». Разве это не то же самое, что и простые старые байты, за исключением, возможно, интерпретации (например, где биты каждого символа Unicode начинаются и заканчиваются как utf-8)?


person huggie    schedule 27.06.2013    source источник


Ответы (1)


Кодовая точка — это число, которое действует как идентификатор символа Unicode. Сама кодовая точка не может быть сохранена, она должна быть закодирована из Unicode в байты, например. УТФ-16ЛЕ. Хотя определенный байт или последовательность байтов могут представлять определенную кодовую точку в данной кодировке, без информации о кодировании нет ничего, что могло бы связать кодовую точку с байтами.

person Ignacio Vazquez-Abrams    schedule 27.06.2013
comment
Я где-то читал, что внутри Python использует UCS-2 в своем типе Unicode. И это тип кодирования. Так что действительно, когда мы сохраняем кодовые точки в Unicode, тогда была предопределена какая-то внутренняя кодировка? - person huggie; 28.06.2013
comment
До версии 3.3 да. Для выбора доступны как UCS-2, так и UCS-4. Python 3.3 меняет ситуацию. - person Ignacio Vazquez-Abrams; 28.06.2013