Maison >développement back-end >Tutoriel Python >Octets que vous devez apprendre dans l'apprentissage Python

Octets que vous devez apprendre dans l'apprentissage Python

高洛峰
高洛峰original
2017-03-13 18:04:361804parcourir

PythonVous devez apprendre les octets chaque jour pour apprendre et comprendre les octets en Python. Les amis intéressés peuvent se référer au

Bytecode en Python exprimé sous la forme de b'xxx'. x peut être représenté par des caractères, ou il peut être représenté par la forme de codage ASCII xnn, où nn va de 00 à ff (hexadécimal), soit un total de 256 caractères.

1. Opérations de base

Les opérations de base des octets sont répertoriées ci-dessous. On peut voir que cela est très similaire à String :


In[40]: b = b"abcd\x64"
In[41]: b
Out[41]: b'abcdd'
In[42]: type(b)
Out[42]: bytes
In[43]: len(b)
Out[43]: 5
In[44]: b[4]
Out[44]: 100 # 100用十六进制表示就是\x64

Si vous souhaitez modifier un certain octet dans une chaîne d'octets, vous ne pouvez pas le modifier directement. Vous devez le convertir en bytearray puis le modifier : <.>


In[46]: barr = bytearray(b)
In[47]: type(barr)
Out[47]: bytearray
In[48]: barr[0] = 110
In[49]: barr
Out[49]: bytearray(b&#39;nbcdd&#39;)

2. La relation entre les octets et les caractères

Il est également mentionné ci-dessus que les octets et les caractères sont très similaires. En fait, ils peuvent être convertis les uns dans les autres. Les octets peuvent être convertis en caractères correspondants via une certaine forme de codage. Les octets peuvent être convertis en caractères en passant la méthode d'encodage via la méthode encode(), et les caractères peuvent être convertis en octets via la méthode decode() :


In[50]: s = "人生苦短,我用Python"
In[51]: b = s.encode(&#39;utf-8&#39;)
In[52]: b
Out[52]: b&#39;\xe4\xba\xba\xe7\x94\x9f\xe8\x8b\xa6\xe7\x9f\xad\xef\xbc\x8c\xe6\x88\x91\xe7\x94\xa8Python&#39;
In[53]: c = s.encode(&#39;gb18030&#39;)
In[54]: c
Out[54]: b&#39;\xc8\xcb\xc9\xfa\xbf\xe0\xb6\xcc\xa3\xac\xce\xd2\xd3\xc3Python&#39;
In[55]: b.decode(&#39;utf-8&#39;)
Out[55]: &#39;人生苦短,我用Python&#39;
In[56]: c.decode(&#39;gb18030&#39;)
Out[56]: &#39;人生苦短,我用Python&#39;
In[57]: c.decode(&#39;utf-8&#39;)
Traceback (most recent call last):
 exec(code_obj, self.user_global_ns, self.user_ns)
 File "<ipython-input-57-8b50aa70bce9>", line 1, in <module>
 c.decode(&#39;utf-8&#39;)
UnicodeDecodeError: &#39;utf-8&#39; codec can&#39;t decode byte 0xc8 in position 0: invalid continuation byte
In[58]: b.decode(&#39;gb18030&#39;)
Out[58]: &#39;浜虹敓鑻︾煭锛屾垜鐢≒ython&#39;
Nous pouvons voir que les caractères et les octets analysés à l'aide de différentes méthodes de codage sont complètement différents. Si différentes méthodes de codage sont utilisées pour le codage et le décodage, des caractères tronqués seront générés, voire la conversion échouera. Étant donné que chaque méthode de codage contient un nombre différent de types d'octets, xc8 dans l'exemple ci-dessus dépasse le caractère maximum de utf-8.

3. Application

Pour l'exemple le plus simple, je souhaite explorer le contenu d'une page Web. Explorons maintenant la page renvoyée lors de la recherche de Python sur Baidu. Baidu utilise le format de codage UTF-8. Si le résultat renvoyé n'est pas décodé, il s'agira d'une chaîne d'octets très longue. Après un décodage correct, une page HTML normale peut être affichée.


import urllib.request

url = "http://www.baidu.com/s?ie=utf-8&wd=python"
page = urllib.request.urlopen(url)
mybytes = page.read()
encoding = "utf-8"
print(mybytes.decode(encoding))
page.close()
Ce qui précède représente l'intégralité du contenu de cet article. J'espère qu'il sera utile à tout le monde dans l'apprentissage de la programmation Python.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn