在 Python 中将非标准字符解码为 UTF 8

Decoding non standard characters to UTF 8 in Python

我有一个程序通过 Django 中的 webhook 接收字节编码的文本(用 Python 编写)。我从 byte -> 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)

我希望它能成功解码撇号。我还担心如果发送表情符号可能会中断,所以我希望能够转义表情符号和随机字符,如 ∫,但仍保留消息中的真实文字。

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

你问的是这个吗?