为啥 IE 无法显示 UTF-8 编码的文本?

Posted

技术标签:

【中文标题】为啥 IE 无法显示 UTF-8 编码的文本?【英文标题】:Why is IE failing to show UTF-8 encoded text?为什么 IE 无法显示 UTF-8 编码的文本? 【发布时间】:2011-03-29 14:34:21 【问题描述】:

我有一些中文字符正试图在 Kentico 支持的网站上显示。该文本被复制/粘贴到 Kenticos FCK 编辑器中,然后被保存并出现在网站上。在 Firefox、Chrome 和 Safari 中,字符完全符合预期。在 IE 8 标准模式下,我只能看到框。

文本是 UTF-8 编码的,据我所知,它在来自服务器的响应中被正确编码。页面上有一个Content-Type: text/html; charset=utf-8 响应标头和一个<meta http-equiv="content-type" content="text/html; charset=UTF-8" /> 元标记。当我从服务器下载 HTML 并将相关字符的字节与原始 UTF-8 文本文档进行比较时,所有字节都匹配,除了 HTML 不包含 BOM。

这似乎特定于标准模式下的 IE 8。在 IE 8 Quriks 中:它有效。 IE 7 标准:有效。 IE 7 怪癖:有效。我不确定标准模式会如何导致这个问题。

奇怪的是,如果我从 IE 中查看源代码,字符会正确显示在源视图中。

对这里可能出现的问题有什么建议吗?我错过了什么明显的东西吗?

【问题讨论】:

我们遇到了 IE11 有时不显示 UTF-8 图标的问题,我在寻找解决方案时发现了这个问题,但我的问题实际上是由 no-storeno-cache 标题引起的,如所述在这个Font Awesome troubleshooting page。以防万一其他人在这里遇到同样的问题。 【参考方案1】:

我无法详细解释。但这确实是一个已知问题。

这是一个可重现的小代码sn-p:

<!DOCTYPE html>
<html lang="en">
    <head><title>test</title></head>
    <body><p>&#65185;<br>0 0</p></body>
</html>

将其保存为 UTF-8 并在 IE8 中查看。你什么也看不见。将0 0 替换为00 并重新加载页面。它会正常工作的!这绝对是惊人的。奇怪的是,将 0 0 替换为 a a 或将 &lt;br&gt; 替换为 &lt;/p&gt;&lt;p&gt; 也可以解决此问题。这与空白渲染失败有关。

抱歉,我没有权威资源来证明这一点,但这只是 IE8 不如我们预期的那么好的另一个证据。最好的办法是尝试更改 HTML 和/或逐步构建它,以便它在某些时候工作或在徒劳无功时,将以下元标记添加到头部以强制 IE8 进入 IE7 模式:

<meta http-equiv="X-UA-Compatible" content="IE=7" />

【讨论】:

这太疯狂了!但是,强制 IE 7 兼容模式确实适用于公共方面。现在我只需要弄清楚如何在 FCK Editor iframe 中强制兼容模式,以便用户可以实际编辑文本。感谢您的信息! 干杯!这个奇怪的问题很幸运。 我刚刚在这个问题上浪费了 4 个小时来找到一个类似的解决方案(doh!)。虽然没有将兼容模式修复为 IE7(因为 IE9 已经出局),但我只是将其设置为“IE=Edge”,这与说“使用你所知道的最新版本”相同。这似乎迫使 IE9 认识到它应该是 UTF-8 的事实,最奇怪但它有效。如果其他人也得到它,这里供参考。 去他妈的我。我鄙视IE8【参考方案2】:

默认的 IE 编码是西欧 (ISO),因此您需要手动将其更改为 UTF-8 或强制 IE 使用给定的编码,如下所示:

HTML 4.01

&lt;meta http-equiv="content-type" content="text/html; charset=UTF-8"&gt;

HTML 5

&lt;meta charset="UTF-8"&gt;

你还需要在&lt;html&gt;标签中使用lang属性来声明语言

    <html lang="zh">

中文

【讨论】:

这很完美!将语言属性添加到 html 标记就可以了。【参考方案3】:

只是一个疯狂的猜测,但这可能是字体问题。也许你的浏览器可用的字体不能代表所说的汉字。

【讨论】:

【参考方案4】:

我设法通过将文件的 UTF 格式更改为“带有字节顺序标记的 UTF8”来解决同样的问题。

(我使用的编辑器允许我轻松切换文件格式,不知道如何继续,但值得看看不同的 UTF 文件格式,IE(8) 根本不喜欢没有字节顺序标记的 UTF8。 ..)

我还能够从上面的答案中重现 sn-p;

<!DOCTYPE html>
<html lang="en">
    <head><title>test</title></head>
    <body><p>&#65185;<br>0 0</p></body>
</html>

但是在 UTF-Without BOM 中我的结果是“间歇性的”(有时会出现重音符号,有时会出现奇怪的字符,而且对我来说这看起来不像是空白渲染问题......) 请注意,我在摆弄 lang="fr" 和 lang="es",但在所有情况下,更改 UTF 文件格式似乎已经永久解决了我的口音显示问题。 :)

我不是 100% 熟悉 UTF,但如果字符是使用 2 个字节编码的,则必须假设空白问题和被误解的字符可能与源中未对齐的字节有关。

【讨论】:

【参考方案5】:

这可能与导致 Rails 3 在其输出中添加雪人字符的原因相同:What is the _snowman param in Ruby on Rails 3 forms for?

【讨论】:

以上是关于为啥 IE 无法显示 UTF-8 编码的文本?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 SVG 在 IE1 或 /Edge 中无法正确显示?

为啥php制作网页中无法正常显示中文

XML无法显示中文

为啥在ie浏览器当文本框为空,可以弹出提示框,在firefox中无法弹出来

Python学习 如何将UTF-8编码转换成UTF-8 BOM编码?

我的IE9一打开为啥没有直接显示主页。而是出现了-starttype:DesktopIcon这个网址、还是无法显示该页