没有 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。现在你可以使用&lt;meta charset="utf-8"&gt;。 (如果你在 2012 年没有使用 HTML5 DOCTYPE,那你就错了。) 症状表明被测浏览器实际上是在监听BOM:显然服务器和文档本身都没有声明编码,迫使浏览器推断或猜测编码;然后它似乎将 BOM 用作指示 UTF-8,这很有意义(并且在没有 BOM 的情况下,数据被视为 iso-8859-1、windows-1252 或类似的东西,解释了“ ¬, ó, à 的东西)。 @Jukka 但他 一个 BOM 并且正在获取 € 等等 - 这意味着浏览器没有监听 BOM,不是吗? (重新阅读问题...) 啊@Jukka 我没有正确阅读这个问题。正在修复,谢谢。 @JukkaK.Korpela 通常这是因为服务器被配置为发送所有带有 MIME 标记的 ISO-8859-1 文件,无论文件中实际有什么。如果是这样,&lt;meta&gt; 将不足以说服它使用文件编码。例如,在 Apache 中,您需要一个 AddDefaultCharset Off 指令,该指令可以在大多数配置下进入该目录的 .htaccess 文件。【参考方案2】:

&lt;head&gt; 中插入&lt;meta charset="utf-8"&gt;。 或者在服务器端设置标题Content-Type: text/html;charset=utf-8

你也可以添加.htaccess:AddDefaultCharset UTF-8更多信息在这里http://www.askapache.com/htaccess/setting-charset-in-htaccess.html

【讨论】:

请注意,&lt;meta charset="utf-8"&gt; 仅适用于 HTML5。对于 HTML4 及更早版本,请改用 &lt;meta http-equiv-"Content-Type" content="text/html; charset=utf-8"&gt;

以上是关于没有 BOM 的 UTF-8 html 显示奇怪的字符的主要内容,如果未能解决你的问题,请参考以下文章

python去掉BOM头的方法

python 读取带BOM的utf-8格式文件

python 读取带BOM的utf-8格式文件

#yyds干货盘点#害,这恼人的BOM头

无 BOM 的 UTF-8

hadoop 输出中文乱码问题