Qu'est-ce que la représentation interne de la chaîne de caractères en Python 3.x
En Python 3.x, une chaîne se compose des éléments de l'Unicode ordinale. (Voir la citation de la langue de référence ci-dessous). Qu'est-ce que la représentation interne de la chaîne Unicode? Est-il UTF-16?
Les éléments d'un objet de type string sont
Code Unicode unités. Un code Unicode
l'unité est représentée par un objet de type string
d'un point et peut accueillir soit un
16-bits ou 32-bits valeur représentant un
Unicode ordinal (la valeur maximale pour
l'ordinal est donné dans
sys.maxunicode, et dépend de la façon dont
Python est configuré au moment de la compilation).
Les paires de substitution peuvent être présents dans l'
Unicode objet, et sera signalé
comme deux éléments distincts.
Vous devez vous connecter pour publier un commentaire.
Il n'y a eu AUCUN CHANGEMENT dans Unicode représentation interne entre Python 2.X et 3.X.
C'est certainement PAS en UTF-16. UTF-tout est un octet orientée vers la représentation EXTERNE.
Chaque unité de code (caractère, de substitution, etc) a été attribué un nombre de l'intervalle(0, 2 ** 21). Ce que l'on appelle sa "ordinale".
Vraiment, la documentation que vous avez cité tout est dit. La plupart Python binaires 16 bits ordinaux qui vous limite pour le Plan Multilingue de Base ("BMP"), sauf si vous voulez bricolons avec des mères porteuses (pratique si vous ne pouvez pas trouver les cheveux de votre chemise et de votre lit de clous est loin d'être de rouillé). Pour travailler avec le répertoire Unicode, vous préférez une vaste "construire" (32 bits de large).
Brièvement, la représentation interne dans un objet unicode est un tableau de 16 bits entiers non signés, ou un tableau de 32 bits entiers non signés (à l'aide de seulement 21 bits).
La représentation interne va changer en Python 3.3, qui met en œuvre PEP 393. La nouvelle représentation va choisir un ou plusieurs des caractères ascii, latin-1, utf-8, utf-16, utf-32, généralement en essayant d'obtenir une représentation compacte.
Conversions implicites dans les paires de substitution ne se fait que lorsque l'on parle d'héritage Api (ceux qui n'existent que sous windows, où les wchar_t est de deux octets); la chaîne Python sera préservée. Voici les notes de version.
En Python 3.3 et au-dessus, la représentation interne de la chaîne dépend de la chaîne, et peut-être du latin-1, UCS-2 ou UCS-4, tel que décrit dans PEP 393.
Pour les précédentes Pythons, la représentation interne dépend de la construction des pavillons de Python. Python peut être construit avec des valeurs d'indicateur
--enable-unicode=ucs2
ou--enable-unicode=ucs4
.ucs2
s'appuie, en fait,utiliser l'UTF-16 comme leur représentation interne, etucs4
s'appuie l'utilisation de l'UCS-4 /UTF-32.En regardant le code source Disponible 3.1.5, dans
Include/unicodeobject.h
:Les caractères sont stockés dans un tableau de
Py_UNICODE
. Sur la plupart des plates-formes, je croisPy_UNICODE
est#define
d commewchar_t
.Cela dépend: voir ici. Cela est encore vrai pour Python 3 autant que la représentation interne va.
Je pense, il est difficile de juger de la différence entre UTF-16, qui est juste une des séquences de 16 bits de mots, de Python, de l'objet string.
Et Si python est compilé avec Unicode=UCS4 option, elle sera la comparaison entre UTF-32 et de la chaîne Python.
Donc, mieux prendre en compte, ils sont dans une autre catégorie, bien que vous pouvez transformer des uns et des autres.