有趣的UTF-8 Yahoo文件下载标题

时间:2008-10-09 11:33:06

标签: http-headers download

我的公司运行一个网络邮件服务,我们正在尝试诊断Word下载无法自动打开的问题 - 从Yahoo Mail下载相同的* .doc文件会打开,但是我们的一个不会。

在调查标题的过程中,我们看到了来自雅虎的文章:

content-disposition attachment; filename*="utf-8''word document.doc";

我们的标题是这样的:

content-disposition attachment; filename="word document.doc";

雅虎在使用额外的星号和utf-8'指定时究竟做了什么?

2 个答案:

答案 0 :(得分:2)

我认为对此的正确答案是在rfc 2231:

星号(“*”)被重复用于提供语言和语言的指示符    存在字符集信息并且正在使用编码。一个    单引号(“'”)用于分隔字符集和语言    参数值开头的信息。百分号    (“%”)用作编码标志,与RFC 2047一致。

具体来说,参数名称末尾的星号用作    字符集和语言信息可能出现的指示符    参数值的开头。单引号用于    将字符集,语言和实际值信息分开    参数值字符串,百分号用于标记    以十六进制编码的八位字节。例如:

    Content-Type: application/x-stuff;
     title*=us-ascii'en-us'This%20is%20%2A%2A%2Afun%2A%2A%2A

答案 1 :(得分:0)

你在使用什么Mime-Type?

根据RFC 2183(http://www.ietf.org/rfc/rfc2183.txt):

需要星号

在[RFC 822]的扩展BNF表示法中,Content-Disposition    标题字段定义如下:

 disposition := "Content-Disposition" ":"
                disposition-type
                *(";" disposition-parm)

 disposition-type := "inline"
                   / "attachment"
                   / extension-token
                   ; values are not case-sensitive

 disposition-parm := filename-parm
                   / creation-date-parm
                   / modification-date-parm
                   / read-date-parm
                   / size-parm
                   / parameter

 filename-parm := "filename" "=" value

 creation-date-parm := "creation-date" "=" quoted-date-time

 modification-date-parm := "modification-date" "=" quoted-date-time

 read-date-parm := "read-date" "=" quoted-date-time

 size-parm := "size" "=" 1*DIGIT

 quoted-date-time := quoted-string
                  ; contents MUST be an RFC 822 `date-time'
                  ; numeric timezones (+HHMM or -HHMM) MUST be used