2017-01-25 18 views
0

我在Windows下使用python工作。我有這樣的錯誤「的UnicodeDecodeError:‘UTF-8’編解碼器不能解碼字節0x92」當我excecute這個簡單的代碼:「」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

你的錯誤說:「UTF-8」編解碼器不能解碼字節0x92。在Windows代碼頁1252,這個字符映射到U + 2019右引號

它是可能的你用你的Python腳本編輯器被配置爲通過正確的引號來代替單引號(「\ X27」或')。這可能是文本更好,但在源代碼中的可怕。你必須修復它在你的編輯器,或使用其他編輯器。

+0

事實上,我認爲Spyder的原因編碼問題,特別是用引號。當我直接在CONSOL中啓動腳本時,問題消失。 –

0

該錯誤消息說,你在你的文件有一個字節0x92的地方,這是不合法的UTF-8,但在其他的編碼可能,例如:

>>> b'\x92'.decode('windows-1252') 
'`' 

這意味着,你的文件的編碼是 UTF-8,但可能窗口1252,和有問題的字符是反引號,而不是點,即使文字僅出現在註釋中。

因此,要麼改變你的文件編碼爲UTF-8在編輯器或編碼線

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

錯誤消息並沒有提到解釋嗆上的文件,但它可能是你的「主「文件,而不是socket.py

此外,不命名您的文件socket.py,將陰影內置的插座模塊,並導致進一步的錯誤。

設定一個編碼線隻影響一個文件,你需要爲每個文件做到這一點,只有設置它在你的「主」文件是不夠的。

0

謝謝!事實上,這種性格不以UTF-8存在。 但是,我沒有發送字符「`」,對應於windows-1252的0x92,而沒有發送到utf-8。此外,當一個字符「。」出現這個錯誤。在controlAddr中,並且對於兩種編碼都是相同的十六進制代碼,即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))