Je suis confus au sujet de la représentation hexadécimale d'Unicode. J'ai un exemple de fichier avec un seul caractère mathématique de signe intégral. C'est U + 222B Si je cat le fichier ou l'édite en vi, j'obtiens un signe intégral affiché. Un vidage hexadécimal du fichier montre que son contenu hexadécimal est 88e2 0aabConfus au sujet des représentations Unicode
En python, je peux créer un caractère Unicode intégral et imprimer p rendu sur mon terminal et le signe intégral.
>>> p=u'\u222b'
>>> p
u'\u222b'
>>> print p
∫
Ce qui me embrouille est que je peux ouvrir un fichier avec le signe intégral dans, obtenir le symbole intégral mais le contenu hexadécimal est différent.
>>> c=open('mycharfile','r').read()
>>> c
'\xe2\x88\xab\n'
>>> print c
∫
One est un objet Unicode et une est une chaîne simple, mais quelle est la relation entre les deux codes hexagonaux apparemment pour le même personnage? Comment pourrais-je convertir manuellement l'un à l'autre?
'0x222b' = 8747 est le nombre entier du code qui est, en Unicode, associé au signe intégral,' ∫'. Lorsque vous écrivez du texte dans un fichier ou que vous l'envoyez via le réseau, il doit toujours être sérialisé en bits (généralement, les octets (octets) sont les unités préférées ici. la série '0xe2',' 0x88', '0xab' (ou' 0b11100010', '0b10001000',' 0b10101011' en binaire) est l'encodage UTF-8 (http://en.wikipedia.org/wiki/UTF- 8) de '0x222b'. incidemment, les trois principaux «1» du premier octet vous indiquent que ce code est codé sur trois octets: UTF-8 est à la fois de largeur variable et de «synchronisation». – flow
Obligatoire: http://bit.ly/unipain – Daenyth
ce lien mordu semble prometteur. il faut aussi souligner que la gestion Unicode est beaucoup plus saine dans Py3 que dans Py2, au point que ce facteur devrait peser lourd dans la décision de choisir la version Python à utiliser. malheureusement, il y a une division non-bonne et continue entre Py2 et Py3, avec le soutien de la bibliothèque tierce partie en retard. où Py3 brille, c'est que les vieilles 'chaînes ASCII' ont disparu; vous avez toujours affaire à un buffer d'octets (encodé) ou bien un texte (Unicode) (décodé). il s'agit juste de changer de concepts/de nommer des choses, mais alors la programmation est une question de concepts et de noms. – flow