Python POST请求阿拉伯语UTF-8编码问题:接收方获Unicode转义字符
解决Python POST请求中阿拉伯语转Unicode转义的问题
问题核心:使用requests.post的json参数发送包含阿拉伯语的字典时,requests会自动将非ASCII字符转为Unicode转义序列(如\u062c\u0648\u062c\u0644),而接收方无法解析这类转义内容。
解决方案
不要依赖requests自动序列化JSON,而是手动将字典序列化为JSON字符串,强制保留原始非ASCII字符,再通过data参数发送:
- 导入
json模块 - 手动调用
json.dumps(),设置ensure_ascii=False - 请求时使用
data参数传递序列化后的字符串,并在headers中明确指定Content-Type: application/json
修改后的代码
import json import requests headers = { 'accept': 'application/json', 'apikey': 'XXXXXXXXXX', 'Content-Type': 'application/json' # 必须添加这个头 } # 要发送的数据 payload = { 'Data': { 'SickLeaveDate': '1444-10-07', 'PatientEmployeer': 'جوجل', 'PatientJob': 'تطوير البرمجيات' } } # 手动序列化,保留原始字符 json_data = json.dumps(payload, ensure_ascii=False) # 发送请求 response = requests.post(url, headers=headers, data=json_data.encode('utf-8'))
原理说明
- requests的
json参数内部调用json.dumps()时,默认ensure_ascii=True,会把所有非ASCII字符转成Unicode转义序列 - 设置
ensure_ascii=False后,JSON序列化会直接保留阿拉伯语等非ASCII字符的原始编码 - 最后用
encode('utf-8')把字符串转成字节流,确保请求体以UTF-8编码发送,接收方能正确解码原始文本
内容的提问来源于stack exchange,提问作者Manish Vyas
相关产品推荐
相关产品推荐

