【问题标题】:Python requests - Upload files with UTF-8 specials chars like "ÄÖÜ" in filenamePython 请求 - 上传文件名中带有 UTF-8 特殊字符(如“ÄÖÜ”)的文件
【发布时间】:2021-05-05 11:36:36
【问题描述】:

我正在使用 python3 请求库通过带有此 (sn-p) 代码的 REST-API 发布文件:

headers = self.getHeaders()
data = {'options': '{"category":"' + category + '", "keywords":"' + keywords + '", "collectionId":"' + kolid + '", "fileName": "' + filename.decode('utf-8') + '", "dynamicMetadata":' + meta.decode('utf-8') + '}'}
query = {'file': ("'./" + filepath + "'", open(filepath, 'rb'))}
response = requests.post(self.getHost() + "files", headers=headers, data=data, files=(query))

虽然这确实上传了几乎所有文件,但其中一些文件被遗漏了,因为 api 返回了一个错误,指出它无法处理文件名。查看日志时,所有这些文件的文件名中都有 UTF-8 特殊字符(德语变音符号),例如“Ä Ö Ü ”。出于某种原因,我的上传路径(即“查询”字典)包含 unicode 字符,而不是解码后的 UTF-8 特殊字符。

例如在我的 linux 系统上,文件存储在 pictures/attachments/Briefing E-Mailing Verlängerung.pdf 在日志中,路径显示为 “图片/附件/简报电子邮件 Verl\u00e4ngerung.pdf”

在 python 中打印文件路径(打印文件路径)时,我得到一个干净的输出,所以文件路径/文件名必须被请求命令损坏?

(版本):

Python 3.5.3、请求 (2.12.4)、Debian 9.13 4.9.0-14-amd64

【问题讨论】:

    标签: python utf-8 python-requests


    【解决方案1】:

    我猜这是服务器部分的解码问题。

    对我来说,requests 似乎为您对文件名标头进行了编码。


    我还建议通读 How to encode the filename parameter of Content-Disposition header in HTTP?,答案有一个很好的相关 RFC 集合。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-23
      • 2014-04-17
      • 2013-12-22
      • 1970-01-01
      相关资源
      最近更新 更多