2017-07-29 38 views
0

我有一個程序,它通過Django中的webhook(用Python編寫)接收字節編碼的文本。我從字節解碼 - > UTF-8工作正常的信件,但它打破當一個單引號(')在被送到我有這個寫入文本解碼:在Python中將非標準字符解碼爲UTF 8

encoded = request.body 
decoded = parse_qs(encoded) 
body = decoded[b'body'][0].decode("utf-8") 

這是錯誤。

UnicodeEncodeError: 'ascii' codec can't encode character '\u2019' in position 5: ordinal not in range(128) 

我想讓它成功解碼撇號。我還擔心如果發送表情符號可能會中斷,所以我希望能夠像∫一樣避開表情符號和隨機字符,但仍保留消息中的真實單詞。

+1

你是什麼意思「從字節解碼 - > utf-8」? UTF-8是一種將Unicode文本編碼爲字節序列的方式,因此您可以將Unicode字符串編碼爲UTF-8字節,也可以將UTF-8字節解碼爲Unicode字符串。 –

回答

2

parse_qs將與解碼的utf字符串一起工作,但在非ASCII字節上使用扼流圈。例如:

這種失敗:

a = b'restaurant_type=caf\xc3\xa9' 
urllib.parse.parse_qs(a) 
# > UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3...etc 

但是這工作好:

a = b'restaurant_type=caf\xc3\xa9' 
urllib.parse.parse_qs(a.decode()) 
# > {'restaurant_type': ['café']} 

是你要求什麼呢?

+0

是的,謝謝 - 我想我是按照錯誤的順序進行解析和解碼。 – hackerman