【问题标题】:HTML <meta> and <script> charset attributeHTML <meta> 和 <script> 字符集属性
【发布时间】:2014-11-06 08:21:14
【问题描述】:

我试图了解 charset 属性是如何工作的,但我的 charset 属性被忽略了。我将添加我的示例。

1) 我有一个带有 char 属性的元标记的 HTML 文件。

<!DOCTYPE html>
<html>
<head>
<title>Example</title>
<meta charset="windows-1254">
</head>
<body>
<p>Αποτελεί την πλέον επιτυχημένη ομάδα στην ιστορία του</p>
</body>
</html>

文件使用“UTF-8”选项保存。但是我要求浏览器以土耳其语编码(Windows-1254)显示它。我显示的是正确的版本,希腊字母显示正确。 charset="windows-1254" 似乎被忽略了

2) 我还有另一个带有脚本标签的示例。我使用通过选项“UTF-8”保存的 JavaScript 文件

document.write("Αποτελεί την πλέον επιτυχημένη ομάδα στην ιστορία του");

调用它的 HTML 文件使用带有字符集值 windows-1254 的标签。 HTML 文件是使用 ANSI 选项保存的,(它似乎将其保存为 windows-1254)

<!DOCTYPE html>
<html>
<head>
<title>JS Dosyası Örneği</title>
</head>
<body>
<script src="javascript.js" charset="windows-1254"></script>
</body>
</html>

JS 文件显示正确,charset="windows-1254" 似乎又被忽略了。

3) 我还有另一个带有脚本标签的例子。我使用通过选项“UTF-8”保存的 JavaScript 文件

document.write("Örnek yazı");

调用它的 HTML 文件使用带有字符集值 windows-1254 的标签。 HTML 文件是使用 ANSI 选项保存的,(它似乎将其保存为 windows-1254)

<!DOCTYPE html>
<html>
<head>
<title>JS Dosyası Örneği</title>
</head>
<body>
<script src="javascript.js" charset="windows-1254"></script>
</body>
</html>

JS 文件显示正确,charset="windows-1254" 似乎没有被忽略,如果我删除 charset="windows-1254" 它可以正常工作。我没有看到 charset 属性的效果。 (听起来并不奇怪,好像IE检测到页面是windows-1254编码的,JS文件不一样)

4) 最后一个例子来自 W3Schools:

http://www.w3schools.com/tags/tryit.asp?filename=tryhtml_script_charset

如果我按照建议更改字符集值,则希腊字母在 IE 中显示不正确。似乎字符集属性没有被忽略。

问题是“为什么我的属性被忽略而 W3Schools 的例子没有?”。

【问题讨论】:

  • 问题是什么?您应该在每个帖子中问一个问题,并清楚地问清楚。 “字符集如何工作?”太宽泛了,所以尝试阅读例如w3.org/International/O-charset.en.php,然后可能会问一个有针对性的问题,如果问题仍然存在。
  • 问题是,“为什么在我的示例中忽略了 char 属性?”这仅取决于我在记事本上保存文件的方式。
  • 如果您询问自己使用 script 进行的测试,您应该删除对 meta 和 w3schools 的引用,并准确说明您保存文件的方式(哪个程序,哪个选项)。
  • 希望现在可以了。

标签: character-encoding


【解决方案1】:

我认为它取决于浏览器。使用:

windows-1252

在 Chrome 中对希腊字母没有造成任何变化。但是,如果您在 IE 中尝试,您会得到:

αβγδεζηθ

【讨论】:

  • 我也有同样的想法,但我有更多的实验,我将通过编辑添加到我的原始条目中。
【解决方案2】:

1) 您似乎使用记事本保存了文件。将文件保存为 UTF-8 时,记事本会在开头插入 BOM(字节顺序标记)。 BOM 充当“签名”,使浏览器无论如何都将文件视为 UTF-8 编码。这种实际行为记录在 HTML5 中(8.2.2.2 Determining the character encoding;技术性警告!)。所以meta标签被忽略了。

2) 如 1. JS 文件开头的 BOM 使浏览器将其视为 UTF-8 编码。 HTML 文档的编码与这里无关。

3) 由于 JS 文件是用 BOM 保存为 UTF-8 的,因此它可以独立于charset 属性进行正确处理。在这个简单的示例中,HTML 文件的编码及其编码信息仅影响其 title 元素(可能显示在文档本身之外)。

4) W3schools 不可靠且令人困惑,应避免使用。目前尚不清楚他们想说什么以及他们在做什么,但他们似乎以某种方式在iframe 元素中呈现测试文档。通常charset 属性很重要(在 Firefox 的那个页面上对我来说很重要),当没有被 BOM 或 HTTP 标头覆盖时。

【讨论】:

  • 感谢您的解释。对于 3. 主题,是的,我使用 ANSI 选项保存它,但它保存为 windows-1254(土耳其语)。作为总结,我将 HTML 文件保存为 ANSI,将 JS 文件保存为 UTF-8。我尝试了两个版本的代码:在脚本开始标记中使用 charset="1254" 和没有它。然而,对于这两种情况,单词都正确显示。我无法体验到 charset 属性的重要性。
  • 非常感谢您的详细解释。只是一个快速的问题。记事本中 BOM 是否只添加到 UTF-8 中?
  • @Zalajbeg,记事本也将 BOM 添加到“Unicode”和“Unicode big endian”;它们采用 UTF-16 编码,BOM 在那里至关重要,因为它告诉了字节顺序。但是您不想在 Web 上使用 UTF-16。记事本不会将 BOM 添加到“ANSI”编码;这样的编码甚至不允许表示 BOM。
  • 感谢您的精彩回答!
猜你喜欢
  • 1970-01-01
  • 2011-04-09
  • 1970-01-01
  • 2019-02-05
  • 1970-01-01
  • 2019-04-11
  • 2021-12-02
  • 1970-01-01
  • 2012-01-07
相关资源
最近更新 更多