如何在POST请求中正确传递带重音特殊字符以调用WhatsApp API发消息
问题根因
你两次写法的问题都出在手动构造JSON字符串+编码不匹配:
- 第一次写法里,你手动写的
\xe9是 Latin-1 编码下字符é的字节转义,字符串本身不是UTF-8编码,即使请求头声明了charset=utf-8,实际发送的内容和声明的编码不一致,服务端解析就会出现菱形问号乱码。 - 第二次写法你主动把内容编码为Latin-1格式,但JSON规范默认要求使用UTF-8编码,服务端按UTF-8规则解析Latin-1编码的内容,自然还是乱码。
修复方案
直接使用requests库内置的json参数传递请求体,不需要手动拼接JSON字符串、不需要手动编码、也不需要手动声明Content-Type的charset,requests会自动完成JSON序列化、UTF-8编码、请求头补充的全流程:
def send_message(): headers = { 'x-maytapi-key': API_TOKEN, } url = f"{INSTANCE_URL}/{PRODUCT_ID}/{PHONE_ID}/sendMessage" # 直接传Python字典,不要手动拼JSON字符串 payload = { "message": "Essa mensagem é um teste, por favor desconsidere", "to_number": "+55XXXXXXXXXXX", "type": "text" } # 用json参数传递payload,不要用data response = requests.post(url, headers=headers, json=payload) print(response.text)
这个写法会自动把é等特殊字符按UTF-8编码序列化到JSON请求体里,完全符合WhatsApp API的编码要求,不会出现乱码。
内容的提问来源于stack exchange,提问作者Bullzeye
相关产品推荐
相关产品推荐

