Bonjour, voila mon problème, j'ai un tuple en python et j'aimerais le convertir en une chaîne de caractère.
Sur internet beaucoup de personne recommande d'utiliser la fonction .join(), mais j'ai l'impression que cette fonction ne me donne pas un string mais un tuple unifié ?
Pourrais-tu expliquer pourquoi tu récupères 40 octets d'un fichier et que tu essaies de les convertir en texte au lieu de simplement ouvrir le fichier en mode texte et de lire les 40 premiers caractères?
Sinon pour transformer un objet bytes (le b'Mon texte \x00\x00\x00\x00') de ton exemple en chaîne de caractères, il suffit de le décoder avec le codec de ton choix. C'est quoi décoder? C'est lui dire quel est l'équivalent entre la valeur d'un (ou plusieurs) octet et la représentation d'un caractère. Regarde ces exemples:
La raison pour laquelle la représentation des bytes en Python te donne souvent des lettres est parce que tous les encodages ont en commun l'encodage ASCII (pour des valeurs de 0 à 127). Mais au-delà ça dépend du sens qu'on veut donner.
Je ne connais pas l'encodage de ces fichiers binaire, mais je ne vois pas le rapport avec mon problème ? j'arrive bien a récupérer mes données (le fichier binaire ne contient pas que 40 octets de texte), je veut juste convertir mon tuple en string.
Si tu ne vois pas le problème c'est que tu ne comprends pas ce qu'est un encodage, et comment sont sauvegardés les fichiers "texte". Quand tu écris dans un fichier texte abc, en réalité, au niveau des octets, il y a 3 octets représentant les 3 lettres. La valeur de ces octets est donnée par l'encodage ASCII. Donc quand tu lis le fichier en binaire, tu vas recevoir 3 octets. Pour les transformer en une chaîne de caractère, tu vas devoir les décoder selon l'encodage ASCII. Ainsi il va trouver que le premier octet qui vaut 0x61 ou encore en binaire 0b1100001 est en fait un a. Et ainsi de suite.
Tout va bien pour les caractères ASCII. Mais au-delà, il faut savoir comment interpréter les valeurs au-dessus de 0x7F. Et ça, ça varie selon l'encodage.
Comme je te l'ai montré plus haut, tu peux décoder un objet bytes avec sa méthode decode, et ça te retourne un objet str. C'est ce que tu veux il me semble... Sans arguments, decode utilisera l'encodage UTF-8. A toi de voir si ce qui sort à du sens...
Une byte c'est un octet en français. C'est à dire 8 bits. Ni plus, ni moins. Ca ne représente que ce que tu veux que ça représente. Ca peut représenter un nombre, une lettre, n'importe quoi.
Regarde ceci:
des_octets = b'abcd'
print("Des octets: ", des_octets)
print("Représentation en décimal, hexadecimal et binaire de ces octets.")
print("Décimal\tHexa\tbinaire")
for octet in des_octets:
print("{0}\t\t{0:X}\t\t{0:b}".format(octet))
print()
print("On décode ces octets selon la norme UTF-8. Vu que chaque valeur est inférieure à 127, on est dans le code ASCII.")
chaine_de_caracteres = des_octets.decode('utf-8')
for caractere in chaine_de_caracteres:
print(caractere)
</pre>
Et si possible, au lieu d'ignorer mes messages, je préférerais que tu poses des questions si quelque chose t'échappe.
Avant de poster un message, vérifiez la date du sujet dans lequel vous comptiez intervenir.
Si le dernier message sur le sujet date de plus de deux mois, mieux vaut ne pas répondre. En effet, le déterrage d'un sujet nuit au bon fonctionnement du forum, et l'informatique pouvant grandement changer en quelques mois il n'est donc que rarement pertinent de déterrer un vieux sujet.
Au lieu de déterrer un sujet il est préférable :
soit de contacter directement le membre voulu par messagerie privée en cliquant sur son pseudonyme pour accéder à sa page profil, puis sur le lien "Ecrire un message"
soit de créer un nouveau sujet décrivant votre propre contexte
ne pas répondre à un déterrage et le signaler à la modération
entwanne — @entwanne — Un zeste de Python — La POO en Python — Notions de Python avancées — Les secrets d'un code pythonique