Maison >développement back-end >Tutoriel Python >Comment puis-je convertir efficacement entre binaire et ASCII (y compris Unicode) en Python ?

Comment puis-je convertir efficacement entre binaire et ASCII (y compris Unicode) en Python ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-26 05:35:11520parcourir

How Can I Efficiently Convert Between Binary and ASCII (Including Unicode) in Python?

Conversion de binaire en ASCII et vice versa

En Python, la conversion d'une chaîne en sa représentation binaire est simple. En utilisant une combinaison de réduire(), lambda, ord() et bin(), l'équivalent binaire d'une chaîne peut être obtenu. Cependant, cette approche nécessite un épissage manuel des chaînes et un mappage avec les valeurs ASCII correspondantes.

Méthodes de conversion plus simples

Pour Python 2, une méthode plus concise est disponible à l'aide du module binascii :

import binascii
bin(int(binascii.hexlify('hello'), 16))

Cette méthode convertit les caractères ASCII dans la plage [-~, similaire au code original. Pour la reconversion en chaîne :

binascii.unhexlify('%x' % n)

Améliorations de Python 3.2

Dans Python 3.2 et versions ultérieures, le type bytes offre une commodité supplémentaire :

bin(int.from_bytes('hello'.encode(), 'big'))

Pour la reconversion à une chaîne :

n.to_bytes((n.bit_length() + 7) // 8, 'big').decode()

Prise en charge Unicode en Python 3

Pour prendre en charge tous les caractères Unicode dans Python 3, la fonction suivante peut être utilisée :

def text_to_bits(text, encoding='utf-8', errors='surrogatepass'):
    bits = bin(int.from_bytes(text.encode(encoding, errors), 'big'))[2:]
    return bits.zfill(8 * ((len(bits) + 7) // 8))

def text_from_bits(bits, encoding='utf-8', errors='surrogatepass'):
    n = int(bits, 2)
    return n.to_bytes((n.bit_length() + 7) // 8, 'big').decode(encoding, errors) or '<pre class="brush:php;toolbar:false">import binascii

def text_to_bits(text, encoding='utf-8', errors='surrogatepass'):
    bits = bin(int(binascii.hexlify(text.encode(encoding, errors)), 16))[2:]
    return bits.zfill(8 * ((len(bits) + 7) // 8))

def text_from_bits(bits, encoding='utf-8', errors='surrogatepass'):
    n = int(bits, 2)
    return int2bytes(n).decode(encoding, errors)

def int2bytes(i):
    hex_string = '%x' % i
    n = len(hex_string)
    return binascii.unhexlify(hex_string.zfill(n + (n & 1)))
'

Pour la compatibilité Python 2/3 :

Avec ceux-ci fonctions, la conversion entre les chaînes binaires et Unicode devient sans effort dans Python 2 et Python 3.

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