Problème d'encodage automatique de texte

Résolu/Fermé
Nico_63 Messages postés 41 Date d'inscription dimanche 3 novembre 2013 Statut Membre Dernière intervention 27 mai 2023 - 9 mai 2021 à 21:53
yg_be Messages postés 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024 - 10 mai 2021 à 12:23
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
A voir également:

4 réponses

yg_be Messages postés 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024 1 471
9 mai 2021 à 22:31
bonjour,
peut-être peux-tu expliquer ce que tu penses avoir compris, en utilisant un programme plus simple?
0
Nico_63 Messages postés 41 Date d'inscription dimanche 3 novembre 2013 Statut Membre Dernière intervention 27 mai 2023
10 mai 2021 à 03:05
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...
0
yg_be Messages postés 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024 1 471
10 mai 2021 à 10:59
quelle version de python utilises-tu?
qu'essaies-tu de réaliser?
ou bien veux-tu uniquement comprendre pourquoi ton programme se comporte ainsi?
0
yg_be Messages postés 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024 1 471
10 mai 2021 à 11:21
en réalité, tu supposes que le fichier est encodé en utf-8.
et tu découvres que cette supposition est non fondée.
0
Nico_63 Messages postés 41 Date d'inscription dimanche 3 novembre 2013 Statut Membre Dernière intervention 27 mai 2023
10 mai 2021 à 12:12
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)
0
yg_be Messages postés 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024 1 471
10 mai 2021 à 12:23
en effet, ou ainsi:
obj = open('test_1.txt','wb')
obj.write(chaine.encode('Utf-8'))
0