You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用requests库调用API时单引号显示异常问题求助

解决requests调用API后响应文本中撇号显示异常的问题

嘿,我来帮你搞定这个撇号的问题!你遇到的Bachelor’s里的那个撇号其实是智能弯引号(Unicode编码\u2019),不是我们常用的直单引号(\u0027)。这种情况要么是API返回内容本身就用了弯引号,要么是响应的编码处理出了问题,下面给你一步步解决的方案:

步骤1:先确认响应编码是否正确

requests默认会根据响应头的Content-Type来猜测编码,但有时候会猜错,导致字符显示异常。你可以手动指定编码后再获取文本:

r = requests.post(url, json=json_data, headers=headers)  # 先改成更规范的传参方式
r.encoding = 'utf-8'  # 强制指定UTF-8编码
print(r.text)

这里顺便提一句:你原来用data=json.dumps(json_data)的写法可以简化成json=json_data,requests会自动帮你序列化JSON并设置正确的Content-Type: application/json头,避免手动处理可能带来的编码问题。

步骤2:如果API返回的就是弯引号,手动替换

如果确认编码没问题,但响应里还是弯引号,那说明API返回的内容本身就用了智能引号,这时候直接替换成直单引号就行:

简单替换(针对单个弯引号)

fixed_text = r.text.replace('’', "'")

批量替换所有智能引号(包含左/右单引号)

如果还有其他类型的智能引号(比如‘),可以用正则一次性替换:

import re
# 匹配Unicode左单引号(\u2018)和右单引号(\u2019),替换成普通单引号
fixed_text = re.sub(r'[\u2018\u2019]', "'", r.text)

解析JSON后再替换

如果你需要解析成JSON对象后处理,直接用r.json()比json.loads(r.text)更方便,然后针对目标字段替换:

response_data = r.json()
# 假设你的目标字段是degree
response_data['degree'] = response_data['degree'].replace('’', "'")
print(response_data['degree'])  # 输出Bachelor's Degree

为什么json.loads没解决问题?

因为json.loads只是把JSON字符串解析成Python对象,并不会改变字符串里的字符内容——如果JSON字符串本身就包含弯引号,解析后依然会保留,所以必须手动替换这些特殊字符。

内容的提问来源于stack exchange,提问作者Akhil Mathew

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:20:26