没有 BOM 的 UTF-8 html 显示奇怪的字符
Posted
技术标签:
【中文标题】没有 BOM 的 UTF-8 html 显示奇怪的字符【英文标题】:UTF-8 html without BOM displays strange characters 【发布时间】:2012-03-20 02:05:25 【问题描述】:我有一些 html,其中包含一些外来字符(€、ó、á)。 HTML 文档保存为不带 BOM 的 UTF-8。当我在浏览器中查看页面时,外来字符似乎被替换为陌生字符组合(€,ó,Ã)。只有当我将我的 HTML 文档保存为带有 BOM 的 UTF-8 时,字符才会正确显示。
我真的不想在我的文件中包含 BOM,但有人知道它为什么会这样做吗?以及解决方法? (不包括 BOM)
【问题讨论】:
HTML 是否将自身标识为 UTF-8 编码? 您是否在meta
标签中指定了字符集?
您是否对服务器和元标记进行了适当的处理,以告知浏览器内容实际上是 UTF-8?
尝试使用标准字符编码utf8-chartable.de
【参考方案1】:
您可能没有在 HTML 文件中指定正确的字符集。 BOM(感谢@Jukka)将浏览器发送到 UTF-.8 模式;在没有它的情况下,您需要使用其他方式将文档声明为 UTF.8。
如果您有权访问服务器配置,则可能需要确保服务器没有发送错误的字符集信息。参见例如How to change the default encoding to UTF-8 for Apache?
如果您只能访问您的 HTML,则在文档头部添加此元标记应该可以解决问题:
<meta http-equiv='Content-Type' content='Type=text/html; charset=utf-8'>
或者正如@Mathias 指出的那样,新的 HTML 5
<meta charset="utf-8">
(仅当您使用 HTML 5 文档类型时才有效,即使您不使用 HTML 5 标记,也没有好的论据。)
【讨论】:
+1。现在你可以使用<meta charset="utf-8">
。 (如果你在 2012 年没有使用 HTML5 DOCTYPE,那你就错了。)
症状表明被测浏览器实际上是在监听BOM:显然服务器和文档本身都没有声明编码,迫使浏览器推断或猜测编码;然后它似乎将 BOM 用作指示 UTF-8,这很有意义(并且在没有 BOM 的情况下,数据被视为 iso-8859-1、windows-1252 或类似的东西,解释了“ ¬, ó, à 的东西)。
@Jukka 但他 有 一个 BOM 并且正在获取 €
等等 - 这意味着浏览器没有监听 BOM,不是吗? (重新阅读问题...)
啊@Jukka 我没有正确阅读这个问题。正在修复,谢谢。
@JukkaK.Korpela 通常这是因为服务器被配置为发送所有带有 MIME 标记的 ISO-8859-1 文件,无论文件中实际有什么。如果是这样,<meta>
将不足以说服它使用文件编码。例如,在 Apache 中,您需要一个 AddDefaultCharset Off
指令,该指令可以在大多数配置下进入该目录的 .htaccess
文件。【参考方案2】:
在<head>
中插入<meta charset="utf-8">
。
或者在服务器端设置标题Content-Type: text/html;charset=utf-8
。
你也可以添加.htaccess
:AddDefaultCharset UTF-8
更多信息在这里http://www.askapache.com/htaccess/setting-charset-in-htaccess.html
【讨论】:
请注意,<meta charset="utf-8">
仅适用于 HTML5。对于 HTML4 及更早版本,请改用 <meta http-equiv-"Content-Type" content="text/html; charset=utf-8">
。以上是关于没有 BOM 的 UTF-8 html 显示奇怪的字符的主要内容,如果未能解决你的问题,请参考以下文章