Skip to content

当从 HTTP 响应头的 Content-Disposition 字段获取文件名时,即使指定了 encoding 参数,程序也没有…#3

Open
werwerwerwerwerwerwerwerwer wants to merge 1 commit into
g1879:masterfrom
werwerwerwerwerwerwerwerwer:master
Open

当从 HTTP 响应头的 Content-Disposition 字段获取文件名时,即使指定了 encoding 参数,程序也没有…#3
werwerwerwerwerwerwerwerwer wants to merge 1 commit into
g1879:masterfrom
werwerwerwerwerwerwerwerwer:master

Conversation

@werwerwerwerwerwerwerwerwer

Copy link
Copy Markdown

…按照指定的编码格式正确解码文件名,导致文件名出现乱码。

示例问题:

  • 服务器使用 GBK 编码文件名:测试文件.txt
  • 响应头中的文件名(被当作 ISO-8859-1 读取):Content-Disposition: attachment; filename="²âÊÔÎļþ.txt"
  • 期望文件名:测试文件.txt
  • 实际结果:乱码字符 ²âÊÔÎļþ.txt

问题原因:
HTTP 响应头默认使用 ISO-8859-1 编码传输。当服务器使用其他编码(如 GBK、CP932、UTF-8)编码文件名时,这些字节序列会被 HTTP 客户端当作 ISO-8859-1 字符串读取,导致出现乱码。

文件:_funcs.py
函数:_get_file_name(response, encoding) -> str
行数:226-276

当从 HTTP 响应头的 Content-Disposition 字段获取文件名时,如果文件名中包含空格,这些空格会被错误地移除,导致下载后的文件名与实际文件名不一致。

示例问题:

  • 响应头:Content-Disposition: attachment; filename="my file name.txt"
  • 期望文件名:my file name.txt
  • 实际结果:myfilename.txt(空格被移除)

_get_file_name 函数中,代码在处理 content-disposition 响应头时,使用了 .replace(' ', '') 方法移除了所有空格,这导致:

  1. 文件名中包含的空格被错误移除
  2. 仅移除了响应头格式中的多余空格,但同时也移除了文件名内容中的有效空格

文件:_funcs.py
函数:_get_file_name(response, encoding) -> str
行数:214-239

…按照指定的编码格式正确解码文件名,导致文件名出现乱码。

**示例问题:**
- 服务器使用 GBK 编码文件名:`测试文件.txt`
- 响应头中的文件名(被当作 ISO-8859-1 读取):`Content-Disposition: attachment; filename="²âÊÔÎļþ.txt"`
- 期望文件名:`测试文件.txt`
- 实际结果:乱码字符 `²âÊÔÎļþ.txt`

**问题原因:**
HTTP 响应头默认使用 ISO-8859-1 编码传输。当服务器使用其他编码(如 GBK、CP932、UTF-8)编码文件名时,这些字节序列会被 HTTP 客户端当作 ISO-8859-1 字符串读取,导致出现乱码。

文件:`_funcs.py`
函数:`_get_file_name(response, encoding) -> str`
行数:226-276

当从 HTTP 响应头的 `Content-Disposition` 字段获取文件名时,如果文件名中包含空格,这些空格会被错误地移除,导致下载后的文件名与实际文件名不一致。

**示例问题:**
- 响应头:`Content-Disposition: attachment; filename="my file name.txt"`
- 期望文件名:`my file name.txt`
- 实际结果:`myfilename.txt`(空格被移除)

在 `_get_file_name` 函数中,代码在处理 `content-disposition` 响应头时,使用了 `.replace(' ', '')` 方法移除了所有空格,这导致:
1. 文件名中包含的空格被错误移除
2. 仅移除了响应头格式中的多余空格,但同时也移除了文件名内容中的有效空格

文件:`_funcs.py`
函数:`_get_file_name(response, encoding) -> str`
行数:214-239
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant