【发布时间】:2021-08-14 15:06:15
【问题描述】:
我正在尝试使用 urrlib.request 在 Python 中发出 HTTP 请求:
import urllib.request
url = 'https://www.example.com/pdf/123'
request = urllib.request.urlopen(url)
headers = request.getheaders()
当尝试打印标题时,输出包括使用西里尔文但编码错误的文件名:
('Content-Disposition', 'attachment; filename="Ð\x9fÑ\x80о наÑ\x83к-доÑ\x81л Ñ\x81емÑ\x96наÑ\x80.pdf"; modification-date="Thu, 12 May 2016 01:48:56 +0300"; size=57814;')
这可能与默认设置的二进制编码有关,因为 HTTp 响应是 PDF 文件,但我可能是错的。此外,尝试通过浏览器下载该文件,文件名以西里尔文正确显示和保存,无需 mojibake:Про наук-досл семінар.pdf。
所以,我猜"Ð\x9fÑ\x80о наÑ\x83к-доÑ\x81л Ñ\x81емÑ\x96наÑ\x80" 对应于"Про наук-досл семінар"。
如何让 Python 在 HTTP 响应标头中正确显示文件名?
【问题讨论】:
-
检查
response.encoding,必要时设置response.encoding = 'utf-8'? -
@JosefZ 在 urllib 库 HTTPResponse 没有属性“编码”。尝试使用 requests 模块时,response.encoding 为 None 并将其设置为 utf-8 或任何其他编码没有任何改变。
标签: python encoding request http-headers urllib