在Python

时间:2017-07-29 04:34:19

标签: python django encoding utf-8 decoding

我有一个程序通过Django中的webhook(用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 个答案:

答案 0 :(得分:3)

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é']}

这就是你在问什么?

相关问题