2017-01-25 8 views
0

私はWindowsでPythonを使用しています。私はこの単純なコードexcecuteとき:「『UTF8』コーデックバイト0x92をデコードすることはできませんUnicodeDecodeError」は:私はこのエラーを持っている「」Python 2.7:インポートポイントで文字ポイントを使用するとUnicodeDecodeErrorが発生する

import socket 
s=socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.connect((controlAddr, 9051)) 

controlAddrは「127.0.0.1」であると私はそれが文字であることを知っているが問題を引き起こすので、私は別の変換を試みましたが、毎回、私は同じエラーがあります。私は、これらのさまざまな方法を試してみました:

  • controlAddr = u'127.0.0.1'
  • controlAddr = unicode('127.0.0.1')
  • controlAddr.encode('utf-8')
  • controlAddr = u'127'+unichr(ord('\x2e'))+u'0'+unichr(ord('\x2e'))+'0'+unichr(ord('\x2e'))+u'1'

私がメインファイルとsocket.pyファイルの初めに# -*- coding: utf-8 -*-を追加しました。 が...私はまだ同じエラー

答えて

0

あなたのエラーが「はUTF8」コーデックはバイト0x92をデコードすることができないと言う。Windowsコードページ1252では、この文字はU + 2019に右引用符をマッピングします。

それはその可能性がありますあなたのPythonスクリプトに使用するエディタは、一重引用符( '\ x27'または')を正しい引用符で置き換えるように設定されています。テキストはきれいですが、ソースコードではひどいかもしれません。他のエディタを使用してください。

+0

は確かに、私はスパイダーは、引用符で特にエンコードの問題が発生すると思います。私がコンソールを直接起動すると、問題はなくなります。 –

0

を持っているエラーメッセージがUTF-8には有効ではありませんこれは、あなたがどこかのファイルにバイト0x92を持っていると言うが、他のエンコーディングでは、例えば:

ファイルのエンコーディングがあることを意味
>>> b'\x92'.decode('windows-1252') 
'`' 

ない UTF-8、おそらく窓-1252、および問題のある文字は、その文字はコメントのみで発見された場合でも、バッククォートではなく、ドットです。

だからあなたのエディタでUTF-8にファイルのエンコーディングを変更したり、符号化ラインのいずれかのエラーメッセージがインタプリタが上窒息ファイルを言及していないが、それはあなたの "かもしれ

# -*- coding: windows-1252 -*- 

にメイン "ファイルではなく、socket.pyです。

また、ファイル名をsocket.pyにしないでください。これは、組み込みソケットモジュールをシャドーし、さらにエラーにつながります。

エンコーディング行を設定することは、そのファイルにのみ影響します。すべてのファイルでこれを行う必要があります。「メイン」ファイルで設定するだけでは不十分です。

0

ありがとうございました!実際、この文字はutf-8には存在しません。 しかし、0x92に対応する文字「 `」はwindows-1252には送信せず、utf-8には何も送信しませんでした。このエラーは、文字 "。"はcontrolAddrにあり、両方のエンコードの同じ16進コード、つまり0x2eです。このコードでは Traceback (most recent call last): File "C:\Python27\Lib\site-packages\spyderlib\widgets\externalshell\pythonshell.py", line 566, in write_error self.shell.write_error(self.get_stderr()) File "C:\Python27\Lib\site-packages\spyderlib\widgets\externalshell\baseshell.py", line 272, in get_stderr return self.transcode(qba) File "C:\Python27\Lib\site-packages\spyderlib\widgets\externalshell\baseshell.py", line 258, in transcode return to_text_string(qba.data(), 'utf8') File "C:\Python27\Lib\site-packages\spyderlib\py3compat.py", line 134, in to_text_string return unicode(obj, encoding) File "C:\Python27\Lib\encodings\utf_8.py", line 16, in decode return codecs.utf_8_decode(input, errors, True) UnicodeDecodeError: 'utf8' codec can't decode byte 0x92 in position 736: invalid start byte : 完全なエラーメッセージが上に与えられている controlPort = 9051 controlAddr = unicode("127.0.0.1") import socket s=socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((controlAddr, controlPort))

関連する問題