Problème d'encodage automatique de texte [Résolu]

Signaler
Messages postés
21
Date d'inscription
dimanche 3 novembre 2013
Statut
Membre
Dernière intervention
10 mai 2021
-
Messages postés
16057
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
18 juin 2021
-
Bonjour.

La partie de script ci-dessous est censée vérifier que l’encodage automatique du script se fera bien selon la norme Utf-8. En imprimant texte_1 et texte_2, je devrais obtenir le même résultat. Et pourtant ce n’est pas le cas. Il y a quelque chose que je dois mal comprendre. Merci d’avance si quelqu’un peut m’expliquer ce qui ne va pas.

Script :

# -*- coding:Utf-8 -*-

# vérification avec le script ci-dessous #

chaine = 'Ceci doit être un test efficace : &é"èçà@$£§%öµ'
obj = open('test_1.txt','w')
obj.write(chaine)
obj.close()
obj = open('test_1.txt','rb')
texte_1 = obj.read()
print(type(texte_1))
print(texte_1)

texte_2 = chaine.encode('Utf-8')
print(type(texte_2))
print(texte_2
)

Résultat :

>>> 
<class 'bytes'>
b'Ceci doit \xeatre un test efficace : &\xe9"\xe8\xe7\xe0@$\xa3\xa7%\xf6\xb5'
<class 'bytes'>
b'Ceci doit \xc3\xaatre un test efficace : &\xc3\xa9"\xc3\xa8\xc3\xa7\xc3\xa0@$\xc2\xa3\xc2\xa7%\xc3\xb6\xc2\xb5'


Nicolas

4 réponses

Messages postés
16057
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
18 juin 2021
867
bonjour,
peut-être peux-tu expliquer ce que tu penses avoir compris, en utilisant un programme plus simple?
Messages postés
21
Date d'inscription
dimanche 3 novembre 2013
Statut
Membre
Dernière intervention
10 mai 2021

Bonjour.
Je ne peux pas simplifier le programme mais je peux préciser ma pensée.
texte_2 est normalement la suite d’octets qui correspond à l’encodage de chaine en suivant la norme Utf-8.
Il devrait normalement en être de même pour texte_1 grâce à la première ligne du script et via l’enregistrement de chaine dans un fichier texte que j’ouvre ensuite en mode lecture binaire.
Mais texte_1 et texte_2 ne renvoient pas la même chose...
Messages postés
16057
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
18 juin 2021
867
quelle version de python utilises-tu?
qu'essaies-tu de réaliser?
ou bien veux-tu uniquement comprendre pourquoi ton programme se comporte ainsi?
Messages postés
16057
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
18 juin 2021
867
en réalité, tu supposes que le fichier est encodé en utf-8.
et tu découvres que cette supposition est non fondée.
Messages postés
21
Date d'inscription
dimanche 3 novembre 2013
Statut
Membre
Dernière intervention
10 mai 2021

En fait l'encodage en Utf-8 est celui du script lui même.
Mais l'encodage du texte enregistré se fait toujours avec la norme par défaut. Je viens de trouver la solution à mon problème en fouillant la doc de Python. Pour encoder en plus le fichier enregistré en suivant la norme Utf-8, le bon script est celui ci-dessous...
Et là texte_1 et texte_2 sont bien identiques...

# -*- coding:Utf-8 -*-

# vérification avec le script ci-dessous #

chaine = 'Ceci doit être un test efficace : &é"èçà@$£§%öµ'
obj = open('test_1.txt','w',encoding = 'Utf-8')
obj.write(chaine)
obj.close()
obj = open('test_1.txt','rb')
texte_1 = obj.read()
obj.close()
print(type(texte_1))
print(texte_1)

texte_2 = chaine.encode('Utf-8')
print(type(texte_2))
print(texte_2)
Messages postés
16057
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
18 juin 2021
867
en effet, ou ainsi:
obj = open('test_1.txt','wb')
obj.write(chaine.encode('Utf-8'))