10

我刚刚使用W3-validator验证了一个 html 文档,发现如果我使用:

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

和:

<!DOCTYPE HTML>
  • 它会发出警告Line 4, Column 72: Using windows-1252 instead of the declared encoding iso-8859-1.

但是,如果我使用它是固定的:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

我真的不明白发生了什么,我什至不知道如何使用 DOCTYPE 标签,我只是从网上复制并粘贴了一个。

有人可以指出我正确的方向来理解:

  • 为什么会这样
  • 以及如何使用 DOCTYPE 标签
4

6 回答 6

19

更改 DOCTYPE 只是关闭警告 - 它实际上并没有解决任何问题。

iso-8859-1并且windows-1252是非常相似的编码。它们的区别仅在于与从 0x80 到 0x9F 的 32 字节值相关联的字符,其中 iniso-8859-1映射到控制字符,inwindows-1252映射到一些有用的字符,例如欧元符号。

控制字符在 HTML 中是无用的,Web 作者经常错误地声明iso-8859-1并使用这 32 个值中的一个或多个,就好像他们正在使用一样windows-1252,因此浏览器在看到iso-8859-1声明的字符集时会自动将其更改为windows-1252.

验证器只是警告您这将发生。如果您没有使用任何 32 字节值,那么您可以简单地忽略警告 - 这不是错误。如果你是,并且你真的想要iso-8859-1解释字节值而不是windows-1252解释,那么你做错了什么。

同样,这种切换发生在任何 DOCTYPE 的浏览器中,只是 HTML5 验证器比 HTML4 验证器更能帮助您了解它告诉您的内容。

于 2012-01-03T07:36:26.327 回答
7

几点:

  1. 任何 HTML5 验证都应该慎重考虑。该规范仍在积极开发中,并非一切都是一成不变的。
  2. 您正在为该元标记使用 HTML4 语法。尝试<meta charset="iso-8859-1">

也就是说,HTML 验证器在当今时代并没有那么大的作用。

另外,为什么需要指定特定的字符集?

编辑

我的错,显然 HTML4 的默认值是 iso=8869-1。也就是说,HTML5 的默认字符集是 utf-8。

关于 HTML5 文档类型的更多信息可以在John Resig的这篇文章中找到

于 2012-01-03T05:27:30.387 回答
3

它会发出警告Line 4, Column 72: Using windows-1252 instead of the declared encoding iso-8859-1.

这意味着该文件在创建时使用编码窗口 1252(又名 Western Windows 1252 或 cp1252)保存,并且您的字符集声明说“嘿,使用 iso-8859-1 读取此文件”,而这不是文件具有的编码。

元字符集就是因为这个原因而存在的。它的存在是为了声明您正在发送/读取/使用的文件的编码,因此当例如浏览器读取文档时,它知道文件正在使用什么编码。

详细地说,您声明了这个字符集:

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

但是您正在验证的文件实际上是在 Windows 1252 中编码的。如何?为什么?检查您正在使用的文本编辑器以及它用于保存文件的编码。如果编辑器可以配置为更改编码,请选择您要使用的那个。

关于 HTML5

使用

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

或者

<meta charset="iso-8859-1">

都对 HTML5 有效。参见<meta charset="utf-8"> 与 <meta http-equiv="Content-Type">

于 2013-12-04T17:38:03.747 回答
1

执行以下操作:

ISO 8859-15 是的-15,它会工作。我知道这个答案是新的,问题是旧的,但想法是来自像我这样的搜索引擎的未来用户会得到正确的答案

于 2015-04-25T21:33:35.673 回答
1

我可以看到这是一个老问题,但认为最好提供一个更新的答案。也许我注意到了其他人没有注意到的东西(在遇到同样的问题并因此在自己解决之前找到了这篇文章之后)。

W3C 验证器提供了验证器使用的编码选项。您已在文档中指定编码,因此一旦运行验证器,您应该会在顶部信息块中看到“编码:iso-8859-1”。在它的右侧,有一个下拉菜单。将选项从“(自动检测)”更改为“iso-8859-1(西欧)”。然后验证器将使用 iso-8859-1 而不是自己的选择,您将不会收到错误。

于 2013-01-05T12:38:43.150 回答
0

不要在验证器中放置太多库存。通常有太多的 Internet Explorer 变通办法,特别是在 css 中,这会使验证器出错。如果您的页面在所有浏览器中都能正常工作并且您的客户很满意,那么验证器所说的是否重要?

如果您指定 html5 doctype,那么您应该与 meta charset 属性保持一致。为您的页面尝试此操作:

<!DOCTYPE HTML>
<html>
<head>
<meta charset="UTF-8">
</head>

<body>
</body>
</html>
于 2013-04-03T20:48:18.373 回答