喂予從2.移植在Python 2到Python 3: 'UTF-8編碼解碼器不能解碼字節'
試圖端口小片段到Python 3的Python 2:
def _download_database(self, url):
try:
with closing(urllib.urlopen(url)) as u:
return StringIO(u.read())
except IOError:
self.__show_exception(sys.exc_info())
return None
Python的3:
def _download_database(self, url):
try:
with closing(urllib.request.urlopen(url)) as u:
response = u.read().decode('utf-8')
return StringIO(response)
except IOError:
self.__show_exception(sys.exc_info())
return None
但我仍然得到
utf-8 codec can't decode byte 0x8f in position 12: invalid start byte
我需要使用StringIO的,因爲它是一個壓縮文件,我想與功能解析它:
def _parse_zip(self, raw_zip):
try:
zip = zipfile.ZipFile(raw_zip)
filelist = map(lambda x: x.filename, zip.filelist)
db_file = 'IpToCountry.csv' if 'IpToCountry.csv' in filelist else filelist[0]
with closing(StringIO(zip.read(db_file))) as raw_database:
return_val = self.___parse_database(raw_database)
if return_val:
self._load_data()
except:
self.__show_exception(sys.exc_info())
return_val = False
return return_val
raw_zip是download_database FUNC返回
您收到的數據的編碼顯然是* not * UTF-8。它是什麼編碼?如果Web服務器是正確的,那麼HTTP響應的Content-Type頭應該告訴你,以及文檔中的HTML標籤(如果它是HTML)。 – dsh
許多網絡服務器的默認編碼是iso-8859-1。 – lavinio
[Here](https://stackoverflow.com/search?q= [python-3] + codec + can%27t + decode + answers%3A1)在StackOverflow上存在問題,解釋字節解釋爲字符。 – dsh