HTML charset与它应该做的相反

时间:2011-11-07 07:54:36

标签: html character-encoding

所以我在我的网站上注意到unicode字符不会显示,它们都显示为问号。我有这条线:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

检查w3c验证器后,它也显示为UTF-8,但它仍然不起作用。解决方案?删除该行!我不明白为什么这与它应该如何相反。例如,如果您继续该页面:

http://tideart.com/?id=4eb78742

我输入了一些unicode文本,它在任何浏览器中显示都很好,但没有字符集行。如果我要添加上面的行,那么所有这些unicode字符都会变为?。

如果您现在在w3c验证器上检查页面,它实际上是这样说的:

  

在默认为windows-1252之前,验证器也试图读取   具有以下编码的内容,但未成功:UTF-8。

该文本最初是通过两种不同的方式输入的。以UTF8格式保存的HTML表单和文本文件。所以我不明白为什么“utf-8”失败如此可怕,但如果我真的指定了一个“windows-1252”的字符集,它也可以工作。

任何人都想知道发生了什么事?

3 个答案:

答案 0 :(得分:1)

我很确定该页面是使用ISO 8859-1编码的。如果我使用UTF-8,我会得到可怕的问号钻石字形:

  

kljkjkjk

     

勒franais法国,APPEL parfois franais mtropolitain OU franais六边形OU安可franais规范,EST LA varit国立德拉索绪尔franaise appartenant LA法国。 Dans le contexte des comparaisons entrevari t sationsalements,on a hamp habituellement au fran aisstandardde France

但如果我使用ISO 8859-1,则以下内容:

  

€kljkjkjk

     

勒的问题法国,appeléparfois法语METROPOLITAIN OU的问题六边形鸥安可法语normé,EST LA综艺国立德拉索绪尔法语appartenant点菜法国。 Dans le contexte des comparaisonsentrevariétésnationalales,on pense habituellement au«françaisstandardde France»

如果你告诉浏览器你的文件是用UTF-8编码的,但它实际上是ISO 8859-1那么你会有点乱。如果您没有指定字符集,那么浏览器将进行猜测或使用其默认值;在我的情况下,默认值是UTF-8,所以默认情况下我弄得一团糟,并强迫我的浏览器使用ISO 8859-1排序。

答案 1 :(得分:1)

这里有一些严重的混淆: - )。

您可以使用Firebug(在Firefox中)或curl -v等工具下载页面并查看标题。服务器回复是:

HTTP/1.1 200 OK
Date: Mon, 07 Nov 2011 07:59:34 GMT
Server: Apache
Vary: Accept-Encoding
Content-Length: 9659
Content-Type: text/html

如您所见,Content-Type标题指定编码(这是错误的)。在这种情况下,浏览器会尝试猜测。您的页面在发生时似乎编码为ISO-8859-1,这是大多数浏览器中的第一个默认设置,因此它可以正常工作。

如果您将“UTF-8”放入META标题,浏览器会相信您,但显示垃圾(因为该文件位于ISO-8859-1中)。

要解决此问题,请将服务器配置为使用Content-Type标头发送正确的编码。此外,您还可以将编码放入META标记中 - 但请确保它确实匹配。

在这种情况下的规则是:

  • 首先,确定您要使用的编码(有疑问,使用UTF-8)
  • 确保您实际上执行以该编码发送您的网页(对于静态网页,只需检查服务器上的.html文件;对于动态网页,它取决于机制)
  • 确保您的服务器在HTTP标头中发送正确的编码
  • 确保META编码信息正确(严格来说,这是可选的,但对于将页面保存到文件以供离线阅读的人员非常有帮助)

答案 2 :(得分:1)

仅将字符集设置为UTF8是不够的,您还必须将页面保存为utf8(配置文本编辑器)。