在 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é']}
你问的是这个吗?
我有一个程序通过 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é']}
你问的是这个吗?