为了为 HTML5 Doctype 定义字符集,我应该使用哪种表示法?
短: 长:
Content-Type
响应标头中的那个。元标记仅在从本地磁盘文件系统加载页面时使用。
meta charset 声明的两种形式是等效的,并且在不同浏览器中的工作方式应该相同。但是,在将 Web 文件字符集声明为 UTF-8 时,您需要记住以下几点:
以不带字节顺序标记 (BOM) 的 UTF-8 编码保存您的文件。使用元字符集(如上)在 HTML 文件中声明编码。您的 Web 服务器必须为您的文件提供服务,并在 Content-Type HTTP 标头中声明 UTF-8 编码。
默认情况下,Apache 服务器配置为提供 ISO-8859-1 中的文件,因此您需要将以下行添加到您的 .htaccess
文件中:
AddDefaultCharset UTF-8
这将配置 Apache 以提供在 Content-Type 响应标头中声明 UTF-8 编码的文件,但您的文件必须以 UTF-8(无 BOM)开始保存。
没有 BOM,记事本无法将文件保存为 UTF-8。可以是 Notepad++ 的免费编辑器。在程序菜单栏上,选择“Encoding > Encode in UTF-8 without BOM”。您还可以使用“Encoding > Convert to UTF-8 without BOM”打开文件并以 UTF-8 重新保存它们。
有关 Byte Order Mark (BOM) at Wikipedia 的更多信息。
meta
和 HTTP 标头。您只需要 BOM、meta
或 HTTP 标头之一。
Summing up: don't use BOM for UTF-8
我不能同意这一点。 UTF-8 中的 BOM 对于表示编码类型非常有用。否则我们必须猜测,或者使用这个问题所指的元标记之类的东西。 BOM 很酷的一点是它是 Unicode 规范的一部分,因此可以用于以 Unicode 编码的所有数据,而不仅仅是 HTML。我们应该做的是在任何地方使用 BOM,让旧版软件在其上炸毁,报告这些错误并修复它们。
使用短的另一个原因是它与您可能在标记中指定字符集的其他实例匹配。例如:
<script type="javascript" charset="UTF-8" src="/script.js"></script>
<p><a charset="UTF-8" href="http://example.com/">Example Site</a></p>
一致性有助于减少错误并使代码更具可读性。
请注意,charset 属性不区分大小写。您可以使用 UTF-8 或 utf-8,但 UTF-8 更清晰、更易读、更准确。
此外,绝对没有理由在元字符集属性或页眉中使用 UTF-8 以外的任何值。 UTF-8 是自 1999 年 HTML4 以来 Web 文档的默认编码,也是制作现代 Web 页面的唯一实用方法。
此外,您不应在 UTF-8 中使用 HTML 实体。应直接键入版权符号等字符。您应该使用的唯一实体是五个保留标记字符:小于、大于、& 符号、素数、双素数。
实体需要一个 HTML 解析器,您可能并不总是希望继续使用它。它们会引入错误,降低代码的可读性,增加文件大小,有时会在各种浏览器中解码错误,具体取决于您使用的实体。了解如何键入/插入版权、商标、开引号、闭引号、撇号、破折号、破折号、项目符号、欧元以及您在内容中遇到的任何其他字符,并在代码中使用这些实际字符。
Mac 有一个字符查看器,您可以在键盘系统偏好设置中打开它,您可以找到并拖放您需要的字符,或者使用匹配的键盘查看器来查看要键入的键。例如,商标是 Option + 2。UTF-8 包含来自每种书面人类语言的所有字符和符号。
因此,没有任何借口可以使用 -- 代替 em dash。学习标点符号和排版规则也不是一个坏主意……例如,知道句号在紧引号内,而不是在外。
将 标记用于内容类型和编码之类的内容具有很高的讽刺意味,因为在不了解这些内容的情况下,您无法解析文件以获取元标记的值。
不,那不是真的。浏览器开始将文件解析为浏览器的默认编码,UTF-8 或 ISO-8859-1。由于 US-ASCII 是 ISO-8859-1 和 UTF-8 的子集,因此浏览器可以读取 <html><head>无论哪种方式都很好......它是一样的。当浏览器遇到元字符集标记时,如果编码与浏览器已经使用的不同,浏览器会以指定的编码重新加载页面。
这就是为什么我们将 meta charset 标签放在顶部,紧跟在 head 标签之后,在其他任何东西之前,甚至是标题。这样您就可以在标题中使用 UTF-8 字符。
您必须以没有 BOM 的 UTF-8 编码保存您的文件
严格来说,这并不正确。如果您的文档中只有 US-ASCII 字符,则可以将其另存为 US-ASCII 并将其作为 UTF-8 提供,因为它是一个子集。但是如果有 Unicode 字符,你是对的,你必须 Save as UTF-8 without BOM。
如果您想要一个可以将文件保存为 UTF-8 的优秀文本编辑器,我推荐 Notepad++。
在 Mac 上,使用 Mac App Store 中的 Bare Bones TextWrangler(免费)或 Mac App Store 中的 Bare Bones BBEdit,价格为 39.99 美元……对于这样一款出色的工具来说非常便宜。
在任一应用程序中,文档窗口底部都有一个菜单,您可以在其中指定文档编码,您可以轻松选择“UTF-8 no BOM”。当然,您可以将其设置为首选项中新文档的默认设置。
但是,如果您的 Web 服务器在 HTTP 标头中提供编码,这是推荐的,那么两个 [元标记] 都是不必要的。
这是不正确的。您当然应该在 HTTP 标头中设置编码,但您还应该在 meta charset 属性中设置它,以便用户可以将页面从浏览器保存到本地存储中,然后稍后再次打开,在这种情况下将出现的唯一编码指示是元字符集属性。
出于同样的原因,您还应该设置一个基本标记……在服务器上,基本标记是不必要的,但是当从本地存储打开时,基本标记使页面能够像在服务器上一样工作,所有资产到位等,没有断开的链接。
AddDefaultCharset UTF-8
或者您可以更改特定文件类型的编码,如下所示:
AddType text/html;charset=utf-8 html
同时提供 UTF-8 和 Latin-1 (ISO-8859-1) 文件的提示是给 UTF-8 文件一个“文本”扩展名和拉丁语 1 文件“txt”。
AddType text/plain;charset=iso-8859-1 txt
AddType text/plain;charset=utf-8 text
最后,考虑使用 Unix 行结尾保存您的文档,而不是传统的 DOS 或(经典)Mac 行结尾,这无济于事,而且可能会造成伤害,尤其是当我们离这些传统系统越来越远时。
具有有效 HTML5、UTF-8 编码和 Unix 行尾的 HTML 文档是一项出色的工作。您可以在许多情况下共享、编辑、存储、读取和恢复并依赖该文档。是通用语。是数码纸。
"You should also set a base tag..."
应附带描述的注意事项 here。

而不是默认字形或我不认识的一些奇怪字符。
<meta charset="utf-8">
是随/用于 HTML5 引入的。
如文档中所述,两者都是有效的。但是,<meta charset="utf-8">
仅适用于 HTML5(并且更易于输入/记忆)。
在适当的时候,旧样式肯定会在不久的将来被弃用。我会坚持使用新的 <meta charset="utf-8">
。
只有一种方法,但是向上。就科技而言,这就是淘汰旧的(真的,真的很快)
文档: HTML meta charset Attribute—W3Schools
在不质疑其他答案的同时,我认为以下内容值得一提。
“长”(http-equiv)表示法和“短”表示法是相等的。以先到者为准; Web 服务器标头将覆盖所有 标记; BOM(字节顺序标记)将覆盖所有内容,并且在许多情况下它会影响 HTML 4(可能还有其他东西);如果您不声明任何编码,您可能会以浏览器定义的“后备文本编码”方式获取文本。在 Firefox 和 Chrome 中都不是 UTF-8;在没有其他线索的情况下,浏览器将尝试读取您的文档,就好像它是 ASCII 格式一样来获取编码,因此您不能使用任何奇怪的编码(不过,应该使用带有 BOM 的 UTF-16);虽然规范说编码声明必须在文档的前 512 个字节内,但大多数浏览器会尝试读取更多内容。
您可以通过运行 echo 'HTTP/1.1 200 OK\r\nContent-type: text/html; charset=windows-1251\r\n\r\n\xef\xbb\xbf<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta charset="windows-1251"><title>привет</title></head><body>привет</body></html>' | nc -lp 4500
并将浏览器指向 localhost:4500
进行测试。 (当然您会想要更改或删除部分。BOM 部分是 \xef\xbb\xbf
。请注意外壳的编码。)
请注意,显式声明编码非常重要。让浏览器猜测可能会导致安全问题。
UTF-7
曾经存在问题。在网络上嗅探通常也很糟糕,例如,当您上传图像时,某些东西会被嗅探为脚本内容。
使用 HTML5 时,将 <meta charset="utf-8" />
用于网络浏览器。
在使用 HTML4 或 XHTML 时使用 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
,或者用于过时的 DOM 解析器,例如 PHP 5.3 中的 DOMDocument
。
要在电子邮件中嵌入签名,我会使用长版本:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
原因是没有多少电子邮件阅读器使用 HTML5,所以最好使用旧的 HTML 样式。实际上,使用表格也比使用 divs + CSS 更好。
有一些基于 Mozilla Foundation 和 SitePoint 的新闻:
不要使用此值 (http-equiv=content-type),因为它已过时。首选 元素上的 charset 属性。
https://i.stack.imgur.com/4alVf.png
encoding
parameter。
<meta charset='utf-8'>
在 IE6 中工作吗?<meta>
设置字符编码会禁用 IE8 中的先行下载器,这会影响您的页面加载时间。是的,是的,我知道...放弃 IE8。 @MészárosLajos 可能会在几年后回到这里,并为仍然支持 IE8 而大发雷霆。 ;-)