web-dev-qa-db-fra.com

Pourquoi mon code Python imprime-t-il les caractères supplémentaires "ï" ¿lors de la lecture d'un fichier texte?

try:
    data=open('info.txt')
    for each_line in data:
        try:
            (role,line_spoken)=each_line.split(':',1)
            print(role,end='')
            print(' said: ',end='')
            print(line_spoken,end='')
        except ValueError:
            print(each_line)
    data.close()
except IOError:
     print("File is missing")

Lors de l'impression ligne par ligne du fichier, le code a tendance à ajouter trois caractères inutiles au premier plan, à savoir "ï».

Sortie réelle:

Man said:  Is this the right room for an argument?
Other Man said:  I've told you once.
Man said:  No you haven't!
Other Man said:  Yes I have.

Production attendue:

Man said:  Is this the right room for an argument?
Other Man said:  I've told you once.
Man said:  No you haven't!
Other Man said:  Yes I have.
14
vrkratheesh

Je ne trouve pas de doublon pour Python 3, qui gère les encodages différemment de Python 2. Alors, voici la réponse: au lieu d’ouvrir le fichier avec l’encodage par défaut ('utf-8'), utilisez 'utf-8-sig', qui attend et supprime UTF-8 Byte Order Mark , qui correspond à .

C'est, au lieu de

data = open('info.txt')

Faire

data = open('info.txt', encoding='utf-8-sig')

Notez que si vous utilisez Python 2, vous devriez voir, par exemple, Python, Sortie de codage au format UTF-8 et Convertissez UTF-8 avec nomenclature en UTF-8 sans nomenclature en Python . Vous devrez faire quelques manigances avec codecs ou avec str.decode pour que cela fonctionne correctement en Python 2. Mais dans Python 3, il vous suffit de définir le paramètre encoding= lorsque vous ouvrez le fichier.

36
senshin

J'ai eu un problème très similaire lorsqu'il s'agit de fichiers Excel CSV. Au départ, j’avais enregistré mon fichier dans le menu déroulant en tant que fichier .csv utf-8 (séparé par des virgules). Ensuite, je l’ai sauvegardé sous un fichier .csv (délimité par des virgules) et tout allait bien. Peut-être y at-il un problème similaire avec un fichier .txt

0
gavin