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

Python调用Habanero API出现Unicode编码错误问题求助

解决Habanero API返回的作者姓名编码乱码问题

看起来你碰到了典型的双重编码问题——这不是你的请求操作有误,而是Habanero库在处理text格式响应时的编码处理bug导致的。

问题根源

当你请求format="text"时,CrossRef服务器返回的是UTF-8编码的内容,但Habanero可能错误地将这些UTF-8字节用Latin-1(ISO-8859-1)解码成了字符串。原本的é(UTF-8字节是\xc3\xa9)被当成了两个独立的Latin-1字符Ã和©,所以显示成Jofré,JSON里对应的就是\u00c3\u00a9这两个Unicode转义字符。

修复方案

你可以通过反向编码操作来还原正确的字符串,或者直接获取原始响应内容来处理:

方案1:修复已返回的字符串

对Habanero返回的字符串先按Latin-1编码回字节,再用UTF-8解码:

import json
from habanero import cn

# 获取原始返回的乱码字符串
x = cn.content_negotiation(ids="10.1051/0004-6361/201628812", format="text", style='elsevier-harvard')

# 修复编码
fixed_text = x.encode('latin-1').decode('utf-8')
print(fixed_text)

# 修复JSON输出
fixed_json = json.dumps(fixed_text, indent=4, sort_keys=True)
print(fixed_json)

方案2:直接获取原始响应内容

使用raw=True参数获取requests的Response对象,直接解码UTF-8内容:

from habanero import cn

# 获取原始响应对象
resp = cn.content_negotiation(ids="10.1051/0004-6361/201628812", format="text", style='elsevier-harvard', raw=True)

# 直接用UTF-8解码
correct_text = resp.content.decode('utf-8')
print(correct_text)

方案3:升级Habanero库

这个编码问题可能是旧版本Habanero的bug,尝试升级到最新版本看看能不能直接解决:

pip install --upgrade habanero

内容的提问来源于stack exchange,提问作者Peter Swords

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:33:56