【问题标题】:Firefox and UTF-16 encodingFirefox 和 UTF-16 编码
【发布时间】:2013-08-14 20:14:27
【问题描述】:

我正在构建一个编码为 UTF-16 的网站。这意味着每个文件(html,jsp)都以 UTF-18 编码,我在每个 HTML 页面的头部设置:

<meta http-equiv="content-type" content="text/html; charset=UTF-16">

Chrom 和 IE 正确显示了我的索引页。但是,Firefox 不会呈现索引。它显示 2 个奇怪的字符和完整的索引页面代码:

��<!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-16"> ...

你知道原因吗?应该是编码的问题,但是不知道在哪里……

谢谢

【问题讨论】:

  • UTF-18 听起来像是一种热门的新编码。总有一天我们会使用 UTF-21,我们就可以不用再担心那些讨厌的变长问题了。

标签: firefox encoding utf-16


【解决方案1】:

(披露:我是负责火狐相关代码的开发者。)

我正在构建一个编码为 UTF-16 的网站。

请不要。简短的规则是:

  1. 切勿使用 UTF-16 进行交换。
  2. 始终使用 UTF-8 进行交换。
  3. 如果您违反规则 1 和 2 并仍然使用 UTF-16,至少使用 BOM(正确的 BOM)。
  4. 但是说真的,不要违反规则 1 和 2。

如果您在网页上包含用户提供的内容,则使用 UTF-16 意味着您的网站至少在旧版浏览器中容易受到社会工程 XSS 的攻击。在旧版本的 Firefox(20 或更早版本)或基于 Presto 的 Opera 版本中尝试 this demo

为避免该漏洞,请使用 UTF-8。

这意味着每个文件(html,jsp)都以UTF-18编码

哦哦。 :-)

我在每个 HTML 页面的头部设置: &lt;meta http-equiv="content-type" content="text/html; charset=UTF-16"&gt;

仅当所使用的编码将元标记的字节映射到与 ASCII 相同的字节时,元标记才可用作内部编码声明。 UTF-16 不是这种情况。

你知道原因吗?

在十六进制编辑器中没有完整的响应标头和原始响应正文。如上所述,一般的解决方案是始终使用 UTF-8,而不是在 HTTP 上使用 UTF-16。

如果您的内容使用 UTF-16 比 UTF-8 更紧凑的语言,有两点:

  1. 页面上的所有 HTML、JS 和 CSS 在 UTF-8 中更加紧凑。
  2. gzip 让差异消失。

【讨论】:

    【解决方案2】:

    检查服务器是否发送了具有正确编码的Content-Type 标头。

    【讨论】:

    • 如果我用 firebug 检查请求的标头,我会看到: Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7 我该如何更改?
    • 查看响应,而不是请求。
    • Cache-Control public, max-age=600 Content-Type text/html Content-Encoding gzip Server Google Frontend Content-Length 1628
    猜你喜欢
    • 2012-04-01
    • 2012-03-13
    • 1970-01-01
    • 2020-08-02
    • 2011-08-18
    • 1970-01-01
    • 2012-07-23
    • 2015-01-28
    • 1970-01-01
    相关资源
    最近更新 更多