是否在HTML文件中包含Unicode签名(BOM)?

是否在HTML文件中包含Unicode签名(BOM)?,html,utf-8,byte-order-mark,Html,Utf 8,Byte Order Mark,在Dreamweaver中,我可以选择“包含Unicode签名(BOM)” 如果我选中此框并将文件保存为HTML文件,则在web浏览器中查看时效果良好。如果不是,它会给我一些奇怪的瑞典字母符号,比如åäö 如果我使用标题“Content-Type:text/HTML;charset=utf-8”为这个HTML文件提供奇怪的字母,它仍然会给我奇怪的符号 Q1)这是否意味着它不是UTF-8编码的文件(没有显示奇怪符号的BOM表的文件) Q2)是什么让文件UTF-8编码的,它只是Unicode签名(B

在Dreamweaver中,我可以选择“包含Unicode签名(BOM)”

如果我选中此框并将文件保存为HTML文件,则在web浏览器中查看时效果良好。如果不是,它会给我一些奇怪的瑞典字母符号,比如åäö

如果我使用标题“Content-Type:text/HTML;charset=utf-8”为这个HTML文件提供奇怪的字母,它仍然会给我奇怪的符号

Q1)这是否意味着它不是UTF-8编码的文件(没有显示奇怪符号的BOM表的文件)

Q2)是什么让文件UTF-8编码的,它只是Unicode签名(BOM)吗

Q3)我应该还是不应该在我的文件(HTML、Javascript、CSS、PHP)中添加Include Unicode签名(BOM)

我知道我可以在HTML代码中添加
,或者在.htaccess中键入
AddDefaultCharset UTF-8
。我只是想,最佳的解决方案是有一个标题响应,上面写着“这是一个UTF-8编码的文件”,然后还提供一个UTF-8编码的文件。没有别的了

Q4)我以为HTML文件是纯文本文件。这些文件中隐藏了哪些其他信息?我如何读取这些信息?

对于UTF-8,BOM表是完全可选的。指出它可以制造问题,但没有真正的优势;它可以替代其他形式的声明编码,并且应该适用于所有现代浏览器

BOM仅用于阐明编码的结束性。因为UTF-8只有一种持久性,所以它是多余的。它只对UTF-16和其他编码有用。UTF-8编码的文件是UTF-8编码的,无论是否存在BOM表

HTML文件不“隐藏”任何其他信息,它们是纯文本

我的建议是:

  • 编码为不带BOM的UTF-8
  • 添加HTTP
    Content-Type
    头以表示文件的编码
  • 如果文件在HTTP上下文之外被解释(意味着不存在HTTP头,因为该文件不是通过HTTP读取的),也可以将
    标记作为备用项添加到HTML本身中

这为您提供了最佳的兼容性,并且问题的可能性最小。如果您的字符看起来仍然很有趣,那么您的文件实际上没有进行UTF-8编码,或者HTTP头设置不正确。

您需要了解ASCII和Unicode之间的区别,这可能会回答您所有的问题。只需谷歌“ASCII和Unicode之间的差异”并开始阅读……看看这篇文章中的内容:“但这个元标记必须是这一部分的第一件事,因为一旦web浏览器看到这个标记,它将停止解析页面,并在使用您指定的编码重新解释整个页面后重新开始。”提供一个内容类型的http头,告诉它是UTF-8编码的文件,同时提供一个正确的UTF-8编码的文件,不是更好吗?那么浏览器就不必重新开始了。。。如何确定文件是UTF-8编码的(无需检查服务器的HTTP头响应或查找内联元标记)?不过,BOM可以帮助服务器端软件—PHP/ASP.NET/。。。案例它必须弄清楚什么是正确的文件编码来解析任何内联字符。理想情况下,在普通的源代码中不会有任何这样的歧义,但是。。。一旦我知道BOM有多大帮助,我就再也没有回头……这在很大程度上取决于服务器端软件。PHP一般不关心BOM或编码,Python有一个特殊的文件内注释。。。如果BOM表对您有用,那就太好了。但在这个问题的背景下,我看不到任何问题。谢谢你的回答。我的缓存设置欺骗了我,标题设置“text/html”仍然存在,而不是我认为的“text/html;charset=utf-8”。只是最后的澄清。如何确定文件是UTF-8编码的(无需检查服务器的HTTP头响应或查找内联元标记)?@user如果没有任何附带的元数据,就不可能知道文本的编码方式。如果你只有一个纯文本文件,那么你能做的就是猜测。这意味着:尝试以某种编码打开文件,看看是否所有字符都有效。