2016-06-23 10 views
-1

§などの特殊文字を含むテキストファイルを開いて、印刷して読み込もうとしています。以下は実行しているコードです:コーデックで動作しないPythonのreadline

import codecs 
    f = codecs.open('sample_text.txt', mode='r', encoding='utf_8') 
    print f.readline() 

最初の2行は機能しますが、3番目の行は機能しません。エラーコードは言う: トレースバック(最新の呼び出しの最後):

"C:\Users\mallikk\Documents\Python Scripts\special_char_test.py", line 6, in <module> 
    print f.readline() 
    File "C:\Anaconda2\lib\codecs.py", line 690, in readline 
    return self.reader.readline(size) 
    File "C:\Anaconda2\lib\codecs.py", line 545, in readline 
    data = self.read(readsize, firstline=True) 
    File "C:\Anaconda2\lib\codecs.py", line 492, in read 
    newchars, decodedbytes = self.decode(data, self.errors) 
UnicodeDecodeError: 'utf8' codec can't decode byte 0xa7 in position 13: invalid start byte 

任意のアイデア?私が何かを明確にしたり、詳細を追加できるかどうか教えてください。どうもありがとうございます!

+4

このファイルはUTF-8でエンコードされていません。実際のエンコーディングを探し、それを使用します。 – user2357112

+0

私は0xa7が有効なutf8だとは思わない。あなたはそれがutf-8であると確信していますか?なぜコーデックを使用していて、「オープン」ではないのですか? – syntonym

+0

http://stackoverflow.com/questions/4255305/how-to-determine-encoding-table-of-a-text-file – stark

答えて

1

コメント者の発言を拡大するには、ファイルのエンコーディングを調べる必要があります。私が知っている最も簡単な方法は、次のことです。

  1. Firefoxでファイルを開きます。
  2. ページを右クリックし、[ページ情報を表示]を選択します。
  3. 「テキストエンコーディング」の内容を参照してください。
  4. f = codecs.open(...)行にutf_8の代わりに使用するコーデックのcodecs documentationを確認できます。

手順1 – 3のスクリーンショット:

screenshot

0

それはあなたがテキストファイルのエンコーディングがUTF-8と異なる場合がありますWindowsマシン上にあるように、あなたがしようとする場合があります見えますcp1252/ISO-8859-1を使用してバイトストリングをデコードし、utf-8を使用して再度エンコードします。

また、ファイルを読み取る方法のベストプラクティスについてのアドバイスのために、ここで見てみることができます - Difference between open and codecs.open in Python

関連する問題