相关疑难解决方法(0)

如何在HTTP中编码Content-Disposition头文件名参数?

想要强制下载资源而不是直接在Web浏览器中呈现资源的Web应用程序Content-Disposition在表单的HTTP响应中发出标头:

Content-Disposition: attachment; filename=FILENAME

filename参数可用于建议浏览器下载资源的文件的名称.但是,RFC 2183(Content-Disposition)在2.3节(文件名参数)中指出文件名只能使用US-ASCII字符:

当前[RFC 2045]语法将参数值(以及因此内容处理文件名)限制为US-ASCII.我们认识到允许在文件名中使用任意字符集的巨大愿望,但是定义必要的机制超出了本文档的范围.

然而,有经验证据表明,当今大多数流行的Web浏览器似乎都允许非US-ASCII字符(缺乏标准)对编码方案和文件名的字符集规范不同意.问题是,如果文件名"naïvefile"(没有引号,第三个字母是U + 00EF)需要编码到Content-Disposition标题中,那么流行浏览器采用的各种方案和编码是什么?

出于这个问题的目的,流行的浏览器是:

  • 火狐
  • IE浏览器
  • 苹果浏览器
  • 谷歌浏览器
  • 歌剧

browser specifications http-headers

509
推荐指数
15
解决办法
33万
查看次数

多部分表单数据中文件名中的国际字符

我正在使用 Apache HTTP 组件 (4.1-alpha2) 将文件上传到保管箱。这是使用多部分表单数据完成的。以包含国际(非 ascii)字符的多部分形式对文件名进行编码的正确方法是什么?

如果我使用那里的标准 API,服务器会返回一个 HTTP 状态禁止。如果我修改上传代码,则文件名是 urlencoded:

MultipartEntity entity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
FileBody bin = new FileBody(file_obj, URLEncoder.encode(file_obj.getName(), HTTP.UTF_8), HTTP.UTF_8, HTTP.OCTET_STREAM_TYPE );
entity.addPart("file", bin);            
req.setEntity(entity);
Run Code Online (Sandbox Code Playgroud)

文件已上传,但我最终得到的文件名仍然是编码的。例如 %D1%82%D0%B5%D1%81%D1%82.txt

java http internationalization

4
推荐指数
1
解决办法
6179
查看次数