1. 程式人生 > >aiohttp遇到非法字元的處理(UnicodeDecodeError: 'utf-8' codec can't decode bytes in position......)

aiohttp遇到非法字元的處理(UnicodeDecodeError: 'utf-8' codec can't decode bytes in position......)

這個問題困擾了我將近一天時間,如果使用text()函式會一直報“UnicodeDecodeError: 'utf-8' codec can't decode bytes in position 24461-24462: invalid continuation byte”的錯誤,如果使用read()函式以二進位制輸出在後面解析的時候中文是亂碼,網上查了很多資料,主要也是自己的疏忽自己看了原始碼,一直糾結在編碼問題忽略了另一個帶預設值的引數

下面是解決方案:

import aiohttp
import asyncio

headers = {
        "Upgrade-Insecure-Requests": "1",
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36",
        "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
        "Accept-Encoding": "gzip, deflate, sdch, br",
        "Accept-Language": "zh-CN,zh;q=0.8",
    }

async def ss():
    async with aiohttp.ClientSession() as session:
        async with session.get('http://www.iteye.com/blogs/tag/java',headers=headers) as resp:
            print(resp.status)
            # ignore,則會忽略非法字元,預設是strict,代表遇到非法字元時丟擲異常
            d = (await resp.text("utf-8","ignore"))
            # d = await resp.read()
            # d = await resp.text()
            cc(d)

def cc(v):
    print(v)
    soup = BeautifulSoup(v, "lxml")
    contents = soup.select("div.content")
    for conten in contents:
        articleAuthor = conten.select("div.blog_info > a")
        if articleAuthor:
            print(articleAuthor)
            articleAuthor = articleAuthor[0]
        else:
            articleAuthor = ""
        print(articleAuthor)

loop = asyncio.get_event_loop()
tasks = [ss() ]
loop.run_until_complete(asyncio.gather(*tasks))

這樣結果中文就正常顯示("utf-8"其實不是必須的因為預設就是utf-8):

如果是await resp.text()就直接報錯:

如果是await resp.read(),在解析時中文亂碼:

text的原始碼:

@asyncio.coroutine
def text(self, encoding=None, errors='strict'):
    """Read response payload and decode."""
    if self._content is None:
        yield from self.read()

    if encoding is None:
        encoding = self._get_encoding()

    return self._content.decode(encoding, errors=errors)

預設的引數就是strict,代表遇到非法字元時丟擲異常; 
如果設定為ignore,則會忽略非法字元;

相關推薦

aiohttp遇到非法字元處理(UnicodeDecodeError: 'utf-8' codec can't decode bytes in position......)

這個問題困擾了我將近一天時間,如果使用text()函式會一直報“UnicodeDecodeError: 'utf-8' codec can't decode bytes in position 24461-24462: invalid continuation byte”的

word2vec查詢詞向量時報錯:'utf-8' codec cann't decode bytes in position 96-07:unexpected end of data

載入word2vec模型時報錯: model_path = "model/Hanlp_cut_news.bin" w2v_dict = word2vec.load(model_path) print(w2v_dict["奧運"])

解決UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte問題

本文最後更新於2018-6-20,可能會因為沒有更新而失效。如已失效或需要修正,請聯絡我! 早上在用Flask框架時出現了這個問題,我在原始碼裡寫的是 @app.route('/hello') def hello(): return render_te

部署django中出現UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc8 in position 3解決方案

在《Python入門到實踐》18.3例程中,編寫好index.html <p>Learning Log</p><p>Learning Log helps you keep track of your learning,for any to

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xa8 in position 怎麼辦

如題,我遇到了要讀取csv結果發生: UnicodeDecodeError: 'utf-8' codec can't decode byte 0xa8 in position 2987: invalid start byte 怎麼辦呢? 原來的csv儲存命令是: df.t

Python3解決UnicodeDecodeError: 'utf-8' codec can't decode byte..問題 終極解決方案

0x00 問題引出: 最近在做一個買房自動化分析Python指令碼,需要爬取網頁。 在使用urllib獲取reqest的response的時候,還要進行解碼。 見語句: result = res.decode('utf-8') 當執行該語句的時候,

UnicodeDecodeError: ‘utf-8codec cant decode byte...

其他 編碼問題 nbsp pan utf-8 erro can 問題 報錯 1. 編碼問題, 如果來源為編碼為其他的,而是用utf-8去解碼就會報錯。 2. 如果只是有部分無法解碼, 則添加 ‘ingnore’ 參數 a = b‘...‘ result = a.d

【轉】UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc7 in position 1: invalid continuation 漢字編碼

如果在python 3裡面碰到下面的Error message: UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc7 in position 1: invalid continuation byte。 你很可

TensorFlow學習筆記(UTF-8 問題解決 UnicodeDecodeError- 'utf-8' codec can't decode byte 0xff in position 0- in

我使用VS2013  Python3.5  TensorFlow 1.3  的開發環境  UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte 在

UnicodeDecodeError: 'utf-8' codec can't decode byte 0x80 in position 0: invalid start byte解決方法

最近在學機器學習,看《機器學習實戰》,因為書上的程式碼是在Python2下編寫的,所以轉到Python3會有許多問題需要修改。 第3章決策樹有一個函式如下: def grabTree(filename): import pickle fr = open(f

TensorFlow學習筆記(UTF-8 問題解決 UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: in

今天在跑跑程式碼時,遇到了標題的問題,然後網上查了下,在此處: http://www.cnblogs.com/Qt-Chao/p/7474360.html 剛剛好講解了解決該問題的辦法,這裡當作一個筆記,記錄下來。 我使用VS2013  Python3.5  Tenso

python 字串輸出報錯 'utf-8' codec can't encode characters in position

一些字串無法被utf-8解碼,所以可以把無法轉化為utf-8格式的字元‘ignore’掉,再進行解碼。 str().encode('UTF-8', 'ignore').decode('UTF-8') 測試程式碼:  text = ''' '\n

處理UnicodeDecodeError: ‘XXX' codec can't decode bytes in position...的問題

錯誤資訊: UnicodeDecodeError: ‘XXX' codec can't decode bytes in position 2-5: illegal multibyte sequence  這是因為遇到了非法字元,例如:全形空格往往有多種不同的實現方式,比如\

UnicodeEncodeError:'utf-8' codec can't encode characters in position 380-382: surrogates not allowed

考慮是某些字元無法解碼為utf-8的編碼格式,把dataframe(meta)的元素,在編碼過程中,先把無法轉化為utf-8格式的字元‘ignore’掉,再進行解碼。for i in meta: for j in meta.index: meta.lo

python 讀取資料出現UnicodeDecodeError:: 'utf-8' codec can't decode byte 0xc8 in position 0: invalid contin

之前寫程式時也出現過類似錯誤,每次解決了到第二次遇見又忘了具體方法,這次記錄一下。 一、字元編碼問題 先介紹一下字元編碼問題 1.ASCLL與GB2312 由於計算機是美國人發明的,因此,最早只有127個字元被編碼到計算機裡,也就是大小寫英文字母、數字和一些符號,這個

python3 'utf-8' codec can't decode byte 0xb3

問題:UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb3 in position 109: invalid start byte 該問題發生於decode解碼; 編碼與解碼: 編碼就是將字串轉換成位元組碼,涉

tensorflow讀不出圖片,出現'utf-8' codec can't decode..錯誤

首先我試了《實戰Google深度學習框架》這本書,結果圖片讀不出來,上網隨便找了個簡單的程式讀,還是讀不出來,我就查資料,執行以下程式 import importlib importlib.reload(sys) 然後簡單的搞定了,但書裡的 image_raw

python報錯"utf-8 codec can't decode byte 0x"

望文生義,報錯的內容就是說utf-8的編碼方式不能解碼0x的位元組,選擇正確的解碼方式就可以解決。 深入些理解,可以把編碼就是編成位元組資料,就是二進位制的東西,解碼以後就是我們看懂的字串,python裡面就是unicode型別。但是打碼的方式有很多,需要採用適合的方法(打

python3:(unicode error) 'utf-8' codec can't decode

環境: 作業系統:win7 旗艦版 語言:python3.4 文字編輯器:vim、notepad++ 報錯:SyntaxError: (unicode error) 'utf-8' codec can't decode byte 0xb4 in position 0:

'utf-8' codec can't decode byte 0xff in position 0: invalid start byte

‘utf-8’ codec can’t decode byte 0xff in position 0: invalid start byte 覺得有用的話,歡迎一起討論相互學習~Follow Me 今天使用語句 image_raw_data_jpg