Problème d'encodage
victor1507
Messages postés
43
Date d'inscription
Statut
Membre
Dernière intervention
-
victor1507 Messages postés 43 Date d'inscription Statut Membre Dernière intervention -
victor1507 Messages postés 43 Date d'inscription Statut Membre Dernière intervention -
Bonjour a tous,
Je suis en train de dev un petit programme de cryptage (pour une utilisation personnelle) et j'ai un petit problème au niveau de l'encodage. Je m'explique : Mon programme récupère le contenu du fichier à crypter, récupère la valeur unicode de chaque caractère (avec ord()), la modifie en fonction du mot de passe, retrouve le caractère unicode correspondant (avec unichr()) et écrit la chiale cryptée dans un fichier. Pour les fichiers texte tout marche parfaitement, mais des que j'essaie de crypter un document Word par exemple, j'obtiens cette erreur :
J'ai fait quelque recherches et j'ai trouvé que c'est une erreur d'encodage. Quelqu'un sait-il quel encodage faut il utiliser ?
Victor
Je suis en train de dev un petit programme de cryptage (pour une utilisation personnelle) et j'ai un petit problème au niveau de l'encodage. Je m'explique : Mon programme récupère le contenu du fichier à crypter, récupère la valeur unicode de chaque caractère (avec ord()), la modifie en fonction du mot de passe, retrouve le caractère unicode correspondant (avec unichr()) et écrit la chiale cryptée dans un fichier. Pour les fichiers texte tout marche parfaitement, mais des que j'essaie de crypter un document Word par exemple, j'obtiens cette erreur :
UnicodeEncodeError: 'ascii' codec can't encode character u'\x81' in position 0: ordinal not in range(128)
J'ai fait quelque recherches et j'ai trouvé que c'est une erreur d'encodage. Quelqu'un sait-il quel encodage faut il utiliser ?
Victor
A voir également:
- Problème d'encodage
- Encodage ascii - Guide
- Encodage binaire - Guide
- Parametre d'encodage non pris en charge - Guide
- Le flux d’octets était en erreur par rapport à l’encodage de caractères déclaré. la déclaration d’encodage des caractères était peut être incorrecte. ✓ - Forum Programmation
- Soucis d'encodage ✓ - Forum PHP
2 réponses
Salut
1) "la chiale" ???
2) Pourquoi ne pas mettre ton code ?
3) Est-ce que ton code est capable de lire un fichier binaire (Word) en plus d'un fichier texte ?
1) "la chiale" ???
2) Pourquoi ne pas mettre ton code ?
3) Est-ce que ton code est capable de lire un fichier binaire (Word) en plus d'un fichier texte ?
Qu'est ce que Unicode vient faire avec l'encryptage. Ton output sera en général un flux binaire.
Ouvre tes fichiers en mode binaire et basta.
Gates gave ^W sold you the windows.
GNU gave us the whole house.(Alexandrin)
Ouvre tes fichiers en mode binaire et basta.
#!/usr/bin/python buffersize = 1024 buffer = '' FILO ='/bin/ls' FILDEST = 'brol' def proceed_buffer(buffer): """Trivial encryption""" return buffer try: hd = open(FILO, "rb") hdout = open(FILDEST, "wb") except: exit buffer = hd.read(buffersize) while len(buffer) != 0 : result = proceed_buffer(buffer) result = proceed_buffer(buffer) hdout.write(result) buffer = hd.read(buffersize) hd.close() hdout.close()
Gates gave ^W sold you the windows.
GNU gave us the whole house.(Alexandrin)
Bonsoir,
Merci pour ta réponse mais si tu regardes dans le code que j'ai mis un peu plus haut, tu verras que j'ouvre déjà les fichiers en binaires, mais python ne veut pas encoder les caractères que ma fonction retourne dans le fichier de destination et lève une erreur. Après j'ai peut être mal compris ce que tu as voulu me dire, mais ce que tu me propose ne solutionne pas mon problème.
Bien a toi,
Victor
Merci pour ta réponse mais si tu regardes dans le code que j'ai mis un peu plus haut, tu verras que j'ouvre déjà les fichiers en binaires, mais python ne veut pas encoder les caractères que ma fonction retourne dans le fichier de destination et lève une erreur. Après j'ai peut être mal compris ce que tu as voulu me dire, mais ce que tu me propose ne solutionne pas mon problème.
Bien a toi,
Victor
A la limite utilise une liste de bytes, par exemple
Exécution:
Utilise la taille maximale de la liste qui te convient à tes besoins pour la fonction de cryptage.
#!/usr/bin/python buffersize = 1 FILO ='truc' def proceed_buffer(buffer): return buffer try: hd = open(FILO, "rb") except: exit buffer = [] buffer.append( hd.read(buffersize)) while len(buffer[0]) : print(ord(buffer[0])) buffer = [] buffer.append( hd.read(buffersize)) hd.close()
Exécution:
johand@bata:~/src/CCM/PYTHON$ echo -n "éé" > truc
johand@bata:~/src/CCM/PYTHON$ python test_encrypt.py
195
169
195
169
Utilise la taille maximale de la liste qui te convient à tes besoins pour la fonction de cryptage.
Merci pour cette réponse rapide ;)
Premièrement j'ai fait une faute de frappe et ce n'est pas la"chiale" mais plutôt la "chaine".
Pour le code, voici la fonction de cryptage (pour l'instant il faut encore que je change certains trucs au niveau de algorithme mais si tu as une idée pour l'améliorer ne te gêne pas ;) )
Tu me dis de ne pas utiliser la fonction ord(). Mais comment faire pour récupérer le fichier a crypter sous forme binaire ?
https://stackoverflow.com/questions/1035340/reading-binary-file-and-looping-over-each-byte