Python“ SyntaxError:Non-ASCII character '\ xe2' in file”


179

私はいくつかのpythonコードを書いていて、タイトルのようにエラーメッセージが表示されます。これは文字セットに関係しているため、検索できません。

エラーが発生する行は次のとおりです

hc = HealthCheck("instance_health", interval=15, target808="HTTP:8080/index.html")

ANSI ASCIIセットにない文字はわかりませんか?さらに、「\ xe2」を検索しても、表示される文字についての情報は得られません。その行のどの文字が問題の原因ですか?

この問題の修正もいくつか見ましたが、どちらを使用するかわかりません。誰かが問題が何であるかを明確にできますか?(そうするように指示されない限り、pythonはユニコードを解釈しませんか?)

編集:エラーが発生した行の近くにあるすべての行は次のとおりです

def createLoadBalancer():
    conn = ELBConnection(creds.awsAccessKey, creds.awsSecretKey)
    hc = HealthCheck("instance_health", interval=15, target808="HTTP:8080/index.html")
    lb = conn.create_load_balancer('my_lb', ['us-east-1a', 'us-east-1b'],[(80, 8080, 'http'), (443, 8443, 'tcp')])
    lb.configure_health_check(hc)
    return lb

63
ファイルの先頭に#コーディング:utf-8を追加します。
ミュータント

2
投稿内容に問題はありません。近くの線を見てください。
キンダル2014

編集の種類を追加しました。これらの行に何か表示されますか?
KDecker 2014

3
ミュータントの提案を試しましたか?ファイルのどこかに「スマートクォート」(曲がった、または角度の付いた種類)がありますか?
ジョンY

2
それを引き起こす可能性がある1つの例は、EN DASH(- \xe2\x80\x93)です
Martin Thoma

回答:


145

浮遊バイトが浮かんでいます。あなたは実行することでそれを見つけることができます

with open("x.py") as fp:
    for i, line in enumerate(fp):
        if "\xe2" in line:
            print i, repr(line)

"x.py"プログラムの名前に置き換えます。行番号と問題の行が表示されます。たとえば、そのバイトを任意に挿入した後、私は得ました:

4 "\xe2        lb = conn.create_load_balancer('my_lb', ['us-east-1a', 'us-east-1b'],[(80, 8080, 'http'), (443, 8443, 'tcp')])\n"

2
ありがとう、これは大いに役立った!チャーターが何であるか/何であったかはまだわかりません。コードをメモ帳に投げてASCIIとして保存してから貼り付けました。
KDecker 2014

私もこれに直面しました。これは、コピーペーストの問題が原因であると考えられます。この場合、エディター(vim)で文字が空白として表示されました。
Samveen 2014年

そのような文字が単なるバイトではなく、理由のために存在することをpythonに知らせる必要があるかもしれません。クリス・レッドフォードの答えで解決策を見てください。
単に厳しい2014年

7
同じ問題がありました。文字\ xe2はハイフン "–"の一部(\ xe2 \ x80 \ x93)でしたが、ASCII "-"より少し長くなっています。テキストをvimに貼り付けましたが、この長いハイフンには注意を払っていなかったためです。ストーリー全体について、私はこのテキストをダブルハイフン「-」を使用してWikiテキストで作成しました(テキスタイルを使用)
PlasmaBinturong

1
鉱山はアポストロフィにあった-のようにO'Donnell
user2490003

278

UTF-8文字を使用するだけの場合、またはコードに含まれているかどうかを気にしない場合は、この行を.pyファイルの先頭に追加します

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

1
私にとってはそれは機能しません。以下のエラーは常に表示されます。SyntaxError:行393のファイル/home/aslam/projects/deva_26nov/mylibrary/email_constants.pyの非ASCII文字 '\ xe2'ですが、エンコードが宣言されていません。詳細については、python.org / peps / pep
Aslam Khan

2
これが選ばれた答えではない理由はありますか?
2018年

@cph質問されてから4か月後にそれを書きました:)
Chris Redford

@cphは、これは非常に役立ちますが、選択した回答が「ANSI ASCIIセットにない文字は何ですか?」という質問に答えるためです。どちらも良い答えですが、その場合は通常最初のものが勝ちます。
Arthur Dent

39

または、単に次のように使用することもできます。

# coding: utf-8

.pyファイルの先頭


27

\ xe2は「-」文字であり、コピーアンドペーストで表示されますが、エンコーディングエラーを引き起こす異なる外観の「-」を使用しています。「-」(コピーペーストから)を正しい「-」(キーボードボタンから)に置き換えます。


3
どうもありがとう !私の場合、それは "'"文字でした
ピエタ

23

ファイルの文字エンコーディングを変更し、

常にコードの下に行の下に置きます

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

10

Webからコメントをコピーして貼り付けるときに同じエラーが発生しました

私にとっては、一重引用符( ')でした

消去して再入力したところです。


私は同じエラーを抱えていましたが、ローカルでテストしている間に壊れることはなく、うまくいきました。しかし、サーバーで実行すると、エンコードエラーが発生しました。コメントの単一引用符をutf-8バージョンに置き換える必要がありました。
shivgre


4

コメントの文字でこのエラーが発生しました(コンテンツをメモを取るためにWebからエディターにコピー/貼り付けした場合)。

テキストラングラーで解決するには:

  1. テキストを強調表示します
  2. [テキスト]メニューに移動します
  3. 「Convert to ASCII」を選択します

2
オプションは、TextWranglerの後のバージョンでtext-> zap gremlinsに変更されましたが、私にとってはうまくいきました:-)
TheMethod

4

PEP 0263に基づく-Pythonソースコードエンコーディングの定義

Python will default to ASCII as standard encoding if no other
encoding hints are given.

To define a source code encoding, a magic comment must
be placed into the source files either as first or second
line in the file, such as:

      # coding=<encoding name>

or (using formats recognized by popular editors)

      #!/usr/bin/python
      # -*- coding: <encoding name> -*-

or

      #!/usr/bin/python
      # vim: set fileencoding=<encoding name> :

それでも最初のコメントから質問まで機能しましたが、回答には説明が含まれています。ありがとう
WebComer

3

私は同じ問題を抱えており、これをファイルの先頭に追加しました(Python 3では問題はありませんでしたが、Python 2で行いました

#!/usr/local/bin/python
# coding: latin-1

2

スタックオーバーフローを調べてから約30分後、コメントで単一引用符 "'"を使用するとエラーが解消されることがわかりました。

SyntaxError: Non-ASCII character '\xe2' in file

トレースバックを確認した後、コメントで使用されている単一引用符を見つけることができました。


2

それが誰かを助ける場合、私にとっては、Python 2.7コマンドでPython 3.4でDjango実装を実行しようとしたために起こりました


Djangoを使用していませんでしたが、これはまだ役に立ちました。私はpython 3を使用してスクリプトを記述し、それをpython 2で実行してみました。正しいバージョンで実行すると、エラーは解消しました。ありがとう!
JustBlossom

1

以下の単純な.pyコードを実行すると、この問題が発生しました。

import sys
print 'version is:', sys.version

上記のDSMのコードは以下を提供しました:

1 'print \ xe2 \ x80 \ x98version is \ xe2 \ x80 \ x99、sys.version'

したがって、John Yが示唆したように、私のテキストエディターがSMART QUOTESを使用していたことが問題でした。テキストエディターの設定を変更し、ファイルを再度開いて保存すると、問題なく動作します。


1

私はその奇妙なウィンドウのアポストラフィを解析しようとしています。ここでいくつかのことを試した後、機能するコードスニペットです。

def convert_freaking_apostrophe(self,string):

   try:
      issuer_rename = string.decode('windows-1252')
   except:
      issuer_rename = string.decode('latin-1')
   issuer_rename = issuer_rename.replace(u'’', u"'")
   issuer_rename = issuer_rename.encode('ascii','ignore')
   try:
      os.rename(directory+"/"+issuer,directory+"/"+issuer_rename)
      print "Successfully renamed "+issuer+" to "+issuer_rename
      return issuer_rename
   except:
      pass

#HANDLING FOR FUNKY APOSTRAPHE
if re.search(r"([\x90-\xff])", issuer):
   issuer = self.convert_freaking_apostrophe(issuer)

0

同じ問題が発生しましたが、文字列をそのままコピーして貼り付けたためです。後でエラーが消えたので、文字列を手動で入力したとき。

-サインが原因でエラーが発生しました。手動で入力して置き換えると-エラーが解消しました。

コピーされた文字列 10 + 3 * 5/(16 − 4)

手動で入力した文字列 10 + 3 * 5/(16 - 4)

両方のハイフンに少し違いがあることがはっきりとわかります

これは、OSやソフトウェアによってフォーマットが異なるためだと思います。


0

私にとって問題は、引用符内のその記号「 '」が原因でした。私がpdfファイルからコードをコピーしたので、それはそのエラーを引き起こしました。「」をこの「」に置き換えたところです。


0

これの原因となった文字を特定したい場合は、問題のある変数を文字列に割り当てて、iPythonコンソールに出力します。

私の場合

In [1]: array = [[24.9, 50.5]​, [11.2, 51.0]]        # Raises an error

In [2]: string = "[[24.9, 50.5]​, [11.2, 51.0]]"     # Manually paste the above array here

In [3]: string
Out [3]: '[[24.9, 50.5]\xe2\x80\x8b, [11.2, 51.0]]' # Here they are!

0

私にとって、問題はMacのコードにコードを入力し、それをMacのメモからコピーし、vimセッションに貼り付けてファイルを作成したことが原因でした。これは、私の単一引用符を曲線タイプにしました。それを修正するために、vimでファイルを開き、同じ文字を削除して再入力するだけで、すべての湾曲した単一引用符を直線の種類で置き換えました。同じキーストロークで曲がった一重引用符を作成したのはMacノートでした。


0

長い間問題の原因を見つけることができませんでしたが、後で「UTC-12:00」という行をWebからコピーしたことに気付き、ハイフン/ダッシュが問題の原因でした。この「-」をもう一度書いたところ、問題は解決しました。

したがって、貼り付けた行のコピーでもエラーが発生することがあります。そのような場合は、貼り付けたコードをコピーし直すだけで機能します。書き直すと、何も変更されていないように見えますが、エラーはなくなります。


-1

私が使用するテキストファイルを読むときに同様の問題があるとき...

f = open('file','rt', errors='ignore')
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.