Le b
préfixe signifie une bytes
chaîne littérale .
Si vous le voyez utilisé dans le code source Python 3, l'expression crée un bytes
objet , pas un objet Unicodestr
normal . Si vous le voyez en écho dans votre shell Python ou dans le cadre d'une liste, d'un dict ou d'un autre contenu de conteneur, vous voyez un bytes
objet représenté à l'aide de cette notation.
bytes
Les objets contiennent essentiellement une séquence d'entiers compris entre 0 et 255, mais lorsqu'ils sont représentés, Python affiche ces octets sous forme de points de code ASCII pour faciliter la lecture de leur contenu. Tous les octets en dehors de la printable plage de caractères ASCII sont représentés comme des séquences d'échappement (par exemple \n
, \x82
, etc.). Inversement, vous pouvez utiliser à la fois des caractères ASCII et des séquences d'échappement pour définir des valeurs d'octet; pour les valeurs ASCII, leur valeur numérique est utilisée (par exemple b'A'
== b'\x41'
)
Étant donné qu'un bytes
objet est constitué d'une séquence d'entiers, vous pouvez construire un bytes
objet à partir de n'importe quelle autre séquence d'entiers avec des valeurs comprises entre 0 et 255, comme une liste:
bytes([72, 101, 108, 108, 111])
et l'indexation vous rend les entiers (mais le découpage produit une nouvelle bytes
valeur; pour l'exemple ci-dessus, value[0]
vous donne 72
, mais value[:1]
c'est b'H'
comme 72 est le point de code ASCII pour la lettre majuscule H ).
bytes
modèle de données binaires , y compris le texte codé . Si votre bytes
valeur contient du texte, vous devez d'abord le décoder en utilisant le bon codec. Si les données sont encodées en UTF-8, par exemple, vous pouvez obtenir une str
valeur Unicode avec:
strvalue = bytesvalue.decode('utf-8')
Inversement, pour passer du texte dans un str
objet à bytes
vous devez encoder . Vous devez décider du codage à utiliser; la valeur par défaut est d'utiliser UTF-8, mais ce dont vous aurez besoin dépend fortement de votre cas d'utilisation:
bytesvalue = strvalue.encode('utf-8')
Vous pouvez également utiliser le constructeur bytes(strvalue, encoding)
pour faire de même.
Les méthodes de décodage et d'encodage prennent un argument supplémentaire pour spécifier comment les erreurs doivent être gérées .
Python 2, les versions 2.6 et 2.7 prennent également en charge la création de littéraux de chaîne à l'aide de b'..'
la syntaxe de littéral de chaîne, pour faciliter le code qui fonctionne à la fois sur Python 2 et 3.
bytes
les objets sont immuables, tout comme les str
chaînes. Utilisez un bytearray()
objet si vous avez besoin d'une valeur d'octets mutable.