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 23437 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 :

# -*- 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

  1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    bonjour,
    peut-être peux-tu expliquer ce que tu penses avoir compris, en utilisant un programme plus simple?
    0
  2. Nico_63 Messages postés 41 Date d'inscription   Statut Membre Dernière intervention  
     
    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
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      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
  3. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    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
  4. Nico_63 Messages postés 41 Date d'inscription   Statut Membre Dernière intervention  
     
    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
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      en effet, ou ainsi:
      obj = open('test_1.txt','wb')
      obj.write(chaine.encode('Utf-8'))
      0