1. ホーム
  2. python

[解決済み] なぜ私のPythonコードは、テキストファイルから読み込むときに余分な文字 "ï "¿" を表示するのですか?

2022-02-10 01:20:38

質問

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")

ファイルを一行ずつ印刷すると、先頭に不要な3文字、すなわち "ï "¿" が追加される傾向があります。

実際に出力されたもの

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.

期待される出力

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.

解決方法は?

Python 3はPython 2とエンコーディングの扱いが異なるので、これと重複するものは見当たりません。つまり、デフォルトのエンコーディングでファイルを開くのではなく、(これは 'utf-8' を使用します。 'utf-8-sig' を期待し、それを除去します。 UTF-8 バイトオーダーマーク として表示されるものです。  .

つまり、代わりに

data = open('info.txt')

する

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

Python 2 を使っている場合は、次のように表示されます。 Python、出力をUTF-8にエンコードする PythonでBOM付きのUTF-8をBOM無しのUTF-8に変換する . を使った悪ふざけが必要になります。 codecs または str.decode を使用すると、Python 2 で正しく動作します。しかし、Python 3では、必要なのは encoding= パラメータは、ファイルを開くときに指定します。