2016-11-05 20 views
4

私は次のことを実行しようとしています:エンコーディングを設定する必要があるため、それがなければならないことを私が見つけた、インターネットからAnaconda(Python 3)のSpyderでこのエンコードの問題を解決するには?

UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 6987: ordinal not in range(128)

import json 
path = 'ch02/usagov_bitly_data2012-03-16-1331923249.txt' 
records = [json.loads(line) for line in open(path)] 

しかし、私は次のエラーを取得しますutf-8に変更しましたが、私の問題はすでにutf-8になっていることです。私のファイルはUTF-8にあるよう

sys.getdefaultencoding() 
Out[43]: 'utf-8' 

また、それが見えますので、私は次のコードは動作しますが、 も本当に困惑している:

In [15]: path = 'ch02/usagov_bitly_data2012-03-16-1331923249.txt' 
In [16]: open(path).readline() 

これを解決する方法はありますか?

ありがとうございます!

EDIT:あなたは間違って行くことができるもの

私は私のコンソールでコードを実行すると、私はアナコンダ(https://www.continuum.io/downloads)により提供されるスパイダーでそれを実行すると、それは動作しますが、ない

を知っていますか?

+1

エンコーディングを使用して実際にファイルを開く*しようとしましたか? –

+0

どういう意味ですか? open(path).readline()がうまく動作します – Krowar

+0

ファイルを正しくダウンロードしていないことが必要です。テキストエディタなどでコピー&ペーストしないでダウンロードしてもよろしいですか?あなたのコードは、私があなたが与えた場所からちょうどダウンロードしたのとまったく同じファイル上でシステム上でエラーなく実行されます。私はWindows 7とLinuxの両方でPython 3.5.1を試しました。 –

答えて

2

テキストファイルには、行のどこかにASCII以外の文字が含まれています。どういうわけか、セットアップのデフォルトのファイルのエンコーディングがUTF-8の代わりにASCIIに設定されているので、次の操作を行うと、明示的にファイルのエンコーディングを指定します。

import json 
path = 'ch02/usagov_bitly_data2012-03-16-1331923249.txt' 
records = [json.loads(line.strip()) for line in open(path, encoding="utf-8"))] 

(場合でも、デフォルトの動作にこれを行うと、とにかく良いアイデアです)

+0

ありがとう、それは仕事を作った! しかし、私はスパイダーの最初の場所で、そして私の普通の端末ではなく、どうやってエラーをどうやって得ることができるのかまだ分かりません。 特に私のenv変数PYTHONIOENCODING = UTF-8と、spyderとシステムコンソールの両方でsys.getdefaultencoding()が私にutf-8を与えているので – Krowar

+0

PYTHONIOENCODINGはファイルI/Oとは関係がないため、stdin/stdout/stderr https://docs.python.org/3/using/cmdline.html#envvar-PYTHONIOENCODING。ヒント:http://python-notes.curiousefficiency.org/en/latest/python3/text_file_processing.htmlを読んでください。 –

0

私が先頭に1行追加して、このプログラムを実行しよう:

# -*- coding: utf-8 -*- 

これは、行をフェッチし、出力を示す(U」接頭辞の文字列とを、おそらく変換は、この後に必要になる場合があります)。しかし、それはあなたが言及したようにどんなエラーも投げなかった。

+2

コーディング指令は、スクリプトが外部Unicodeデータをどのように処理するかについて_no_効果があります。 Pythonインタプリタに、スクリプト自体にどのエンコーディングが使われているかを伝えるために使われます。 –

関連する問題