为啥 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-store
和 no-cache
标题引起的,如所述在这个Font Awesome troubleshooting page。以防万一其他人在这里遇到同样的问题。
【参考方案1】:
我无法详细解释。但这确实是一个已知问题。
这是一个可重现的小代码sn-p:
<!DOCTYPE html>
<html lang="en">
<head><title>test</title></head>
<body><p>ﺡ<br>0 0</p></body>
</html>
将其保存为 UTF-8 并在 IE8 中查看。你什么也看不见。将0 0
替换为00
并重新加载页面。它会正常工作的!这绝对是惊人的。奇怪的是,将 0 0
替换为 a a
或将 <br>
替换为 </p><p>
也可以解决此问题。这与空白渲染失败有关。
抱歉,我没有权威资源来证明这一点,但这只是 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
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
HTML 5
<meta charset="UTF-8">
你还需要在<html>
标签中使用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>ﺡ<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 中无法正确显示?
为啥在ie浏览器当文本框为空,可以弹出提示框,在firefox中无法弹出来