UTF-8无BOM的HTML显示奇怪字符

9

我有一些包含一些外语字符(€,ó,á)的HTML。该HTML文档以UTF-8格式保存,没有BOM。当我在浏览器中查看页面时,外语字符似乎被替换为更奇怪的字符组合(€,ó,Ã)。只有当我将HTML文档保存为带有BOM的UTF-8时,字符才能正确显示。

我真的不想在我的文件中包含BOM,但有人知道它可能是为什么吗?是否有其他方法来解决它?(除了包含BOM)


2
HTML 是否以 UTF-8 编码方式进行标识? - Fred Foo
你在meta标签中指定了字符集吗? - Another Code
你是否在服务器和元标签中采取了适当的措施,告知浏览器内容实际上是UTF-8编码的? - Dagg Nabbit
尝试使用标准字符编码 http://www.utf8-chartable.de/ - jacktheripper
2个回答

18
你可能没有在HTML文件中正确指定字符集。BOM(感谢@Jukka)会将浏览器发送到UTF-8模式;如果没有BOM,则需要使用其他方式声明文档的UTF-8编码。
如果你可以访问服务器配置,你可能需要确保服务器没有发送错误的字符集信息。例如,请参见如何更改Apache的默认编码为UTF-8? 如果你只能访问HTML文件,那么在文档头中添加这个meta标签应该就可以解决问题:
<meta http-equiv='Content-Type' content='Type=text/html; charset=utf-8'>

正如 @Mathias 所指出的那样,新的HTML 5

<meta charset="utf-8"> 

(仅在使用HTML 5 doctype的情况下有效,即使您不使用HTML 5标记,也没有任何好的理由反对使用HTML 5 doctype。)


6
现在你只需要使用<meta charset="utf-8">就可以了。(如果你在2012年还没有使用HTML5 DOCTYPE,那么你就错了。) - Mathias Bynens
症状表明被测试的浏览器实际上侦听BOM:显然,服务器和文档本身都没有声明编码,迫使浏览器推断或猜测编码;而且似乎它随后将BOM视为表示UTF-8,这是完全有道理的(在没有BOM的情况下,数据被视为iso-8859-1、windows-1252或类似的东西,解释了那些€、ó、Ã之类的字符)。 - Jukka K. Korpela
@Jukka但他BOM并且得到€等-这意味着浏览器没有听取BOM,不是吗?(重新阅读问题...) - Pekka
啊,@Jukka,我没有仔细阅读问题。正在修复,谢谢。 - Pekka
通常这是因为服务器配置了将所有东西都标记为 ISO-8859-1,而不管实际文件内容的 MIME 标记。如果是这样,<meta> 就不足以说服它使用文件编码。例如在 Apache 中,您需要一个 AddDefaultCharset Off 指令,它可以在大多数配置下的该目录的 .htaccess 文件中使用。 - tchrist

2

1
请注意,<meta charset="utf-8"> 仅适用于 HTML5。对于 HTML4 及更早版本,请使用 <meta http-equiv-"Content-Type" content="text/html; charset=utf-8"> - Remy Lebeau

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接