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




