You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

Python Requests处理非英文UTF-8响应头时出现编码错误求助

解决Requests库获取UTF-8编码响应头时的乱码问题

问题根源

你碰到的问题本质是HTTP协议的历史规范和Requests库当前默认逻辑的冲突:

  • 早期HTTP标准要求响应头只能用ASCII编码,但现在不少服务器会返回UTF-8编码的非英文字符(比如你这里的韩文)
  • Requests库默认用latin-1编码解析响应头(latin-1是ASCII的超集,能兼容所有单字节字符),这就把原本UTF-8的多字节字符拆成单字节解码,自然出现乱码
  • 你设置的req.encoding = 'utf-8'只对响应体内容生效,和响应头的解析逻辑完全无关,所以根本起不到作用

快速解决方法

直接对乱码的响应头文本做反向编码转换就行——先把乱码字符串用latin-1编码回原始字节,再用utf-8解码:

headers = {
    "Accept-Encoding": "gzip, deflate, br",
    "Accept-Language": "ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7",
    "Content-type": "text/plain; charset=utf-8"
}
req = requests.get(link, headers=headers, allow_redirects=True)

# 修复乱码的响应头内容
disposition_header = req.headers['Content-Disposition']
corrected_header = disposition_header.encode('latin-1').decode('utf-8')
print(corrected_header)  # 现在会输出正确的韩文文本:2. 핵심정보를 담은 발표 형성평가 5월 19일

补充说明

你提到的这个问题确实是Requests库的已知议题,社区正在讨论如何更好地支持UTF-8编码的响应头,但目前官方还没有推出正式的内置解决方案,所以手动转码是现阶段最靠谱的临时方案。

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

火山引擎 最新活动