为什么 IE 无法显示 UTF-8 编码的文本?
-
28-09-2019 - |
题
我有一些汉字,我想在 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 查看源代码,字符会正确显示在源代码视图中。
对于这里可能出现的问题有什么建议吗?我错过了一些明显的东西吗?
解决方案
我无法详细解释。但这确实是一个已知的问题。
这是一个小的可重复代码段:
<!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迫使IE8进入IE7模式:
<meta http-equiv="X-UA-Compatible" content="IE=7" />
其他提示
默认的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">
而且您还需要使用 lang
属性在 <html>
标签以声明语言
<html lang="zh">
中文
只是一个疯狂的猜测,但这可能是一个字体问题。也许您浏览器可用的字体可以代表中文字符。
我设法通过将文件的 UTF 格式更改为“带有字节顺序标记的 UTF8”来解决相同的问题。
(我使用的编辑器允许我轻松切换文件格式,不知道如何继续,但值得看看不同的 UTF 文件格式,IE(8) 根本不喜欢没有字节顺序标记的 UTF8...)
我还能够重现上面答案中的片段;
<!DOCTYPE html>
<html lang="en">
<head><title>test</title></head>
<body><p>ﺡ<br>0 0</p></body>
</html>
但是我的结果是“间歇性的”,而在UTF-Without-Without Bom中(有时会出现口音,有时会出现怪异的魅力,而且对我来说,这看起来并不像是一个空白的问题...)请注意,我在摆弄lang =“ fr”和lang =“ es”,但是在所有情况下,更改UTF文件格式似乎已经永久解决了我的口音显示问题。:)
我不是 100% 熟悉 UTF,但如果字符使用 2 个字节进行编码,则必须假设空白问题和误解的字符可能与源中未对齐的字节有关。
这可能是导致Rails 3在其输出中添加雪人角色的类型的类型: Ruby中的Rails 3表格中的Ruby中的_snowman参数是什么?