Problème d'encodage automatique de texte
Résolu
Nico_63
Messages postés
41
Date d'inscription
Statut
Membre
Dernière intervention
-
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
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 :
Résultat :
Nicolas
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:
- Problème d'encodage automatique de texte
- Texte de chanson gratuit pdf - Télécharger - Vie quotidienne
- Logiciel de sauvegarde automatique gratuit - Guide
- Réponse automatique thunderbird - Guide
- Transcription audio en texte word gratuit - Guide
- Excel cellule couleur si condition texte - Guide
4 réponses
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
bonjour,
peut-être peux-tu expliquer ce que tu penses avoir compris, en utilisant un programme plus simple?
peut-être peux-tu expliquer ce que tu penses avoir compris, en utilisant un programme plus simple?
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...
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...
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
en réalité, tu supposes que le fichier est encodé en utf-8.
et tu découvres que cette supposition est non fondée.
et tu découvres que cette supposition est non fondée.
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)
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)