IE浏览器和Firefox不会显示UTF-8

时间:2011-11-04 09:29:07

标签: internet-explorer firefox google-chrome jquery utf-8

3 个答案:

答案 0 :(得分:1)

不要依赖HTTP标头能够传输ASCII之外的任何内容。在您的实体正文中编码您的错误消息。

答案很长:

在我看来,这是HTTP标准的一个很糟糕的领域。根据HTTP / 1.1的标准,

  

HTTP标头字段,包括通用标头(第4.5节),请求标头(第5.3节),响应标头(第6.2节)和实体标头(第7.1节)字段,遵循相同的通用格式在RFC 822 [9]的3.1节中给出。

RFC 822说,

  

3.1.2。割台的结构

     

一旦字段展开,它可能被视为由字段名称后跟冒号(“:”)组成,后跟字段正文,并由回车符/换行符终止。字段名必须由可打印的ASCII字符组成(即,值介于33.和126之间的字符,十进制,冒号除外)。字体可以由除CR或LF之外的任何ASCII字符组成。

因此,HTTP标头是ASCII。但是,在文档的早期,HTTP / 1.1就是这样说的:

  

TEXT规则仅用于描述性字段内容和不打算由消息解析器解释的值。 * TEXT的单词只有在符合RFC 2047 [14]的规则编码时才包含ISO-8859-1 [22]以外的字符集中的字符。

TEXT           = <any OCTET except CTLs,
                  but including LWS>

(4.2表示标题由TEXT组成)

任何八位字节序列与ASCII不同,文本“可以包含ISO-8859-1 [22]以外的字符集中的字符,只有在编码时”似乎(对我来说)间接建议标题是ISO -8859-1。然而,这不如该句子的整个部分重要:

  

* TEXT的单词只有在符合RFC 2047 [14]的规则编码时才包含ISO-8859-1 [22]以外的字符集中的字符。

确实,RFC 2047为我们提供了一种方法,可以将任何字符集中的任何字符串编码为ASCII。 (RFC 2047是电子邮件如何在主题行或发件行中包含日语等内容。)

现在可悲的是:我认为没有任何主流浏览器实现RFC 2047.正如您所见,Chrome将标题视为UTF-8,Firefox视为ISO-8859-1。你可以发送它在RFC 2047中编码,或类似于base64的东西,并在javascript中对其进行解码,但此时,你也可以将其发送到正文中。

答案 1 :(得分:0)

听起来很明显,但您是否已清除浏览器缓存,或尝试在Ajax请求中设置“cache:false”?

答案 2 :(得分:0)

HTTP标头值编码与您网页的编码无关。

特别是,标头值通常仅限于ASCII,除非定义标头的规范表明RFC 2047适用。通过字节膨胀(对ASCII来说是正确的)将字节转换为相应的Unicode代码点将为您提供上面看到的IE和Firefox结果。