获取标头时Python(请求)编码不正确

2024-04-19 16:18:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用请求库(python 3.9)从URL获取文件名。[1]由于某些原因,文件名的编码不正确。 我应该得到“Ogłoszenie_0320.pdf”而不是“OgÅ\x82oszenie_0320.pdf”

我的代码如下所示:

import requests
import re

def getFilenameFromRequest(url : str, headers):
    # Parses from header information
    contentDisposition = headers.get('content-disposition')
    if contentDisposition:
        filename = re.findall('filename=(.+)', contentDisposition)
        print("oooooooooo: " + contentDisposition + " : " + str(filename))
        if len(filename) != 0:
            return filename[0]

    # Parses from url
    parsedUrl = urlparse(url)
    return os.path.basename(parsedUrl.path)

def getFilenameFromUrl(url : str):
    request = requests.head(url)
    headers = request.headers
    return getFilenameFromRequest(url, headers)

getFilenameFromUrl('https://przedszkolekw.bip.gov.pl'+
    '/fobjects/download/880287/ogloszenie-uzp-nr-613234-pdf.html')

知道怎么修吗? 我知道对于标准请求,我可以直接设置编码:

request.encoding = 'utf-8'

但是我该怎么处理这个案子呢


[1]https://przedszkolekw.bip.gov.pl/fobjects/download/880287/ogloszenie-uzp-nr-613234-pdf.html


Tags: importreurl编码returnpdf文件名request
1条回答
网友
1楼 · 发布于 2024-04-19 16:18:24

仅应将基于ascii的latin-1中的字符用作头值 [rfc]。在这里,文件名已转义

>>> s = "Ogłoszenie_0320.pdf"
>>> s.encode("utf8").decode("unicode-escape")
'OgÅ\x82oszenie_0320.pdf'

要扭转这个过程,您可以这样做

>>> sx = 'OgÅ\x82oszenie_0320.pdf'
>>> sx.encode("latin-1").decode("utf8")
'Ogłoszenie_0320.pdf'

(在评论中对话后更新)

相关问题 更多 >