【问题标题】:HTML charset doing the opposite of what it should doHTML charset 与它应该做的相反
【发布时间】:2011-11-07 07:54:36
【问题描述】:

所以我注意到我的网站上没有显示 unicode 字符,它们都显示为问号。我有这行:

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

检查 w3c 验证器后,它也显示为 UTF-8,但仍然无法正常工作。解决方案?删除那条线!我不明白为什么这与它应该的方式相反。例如,如果您进入该页面:

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

我输入了一些 unicode 文本,在这里的任何浏览器中都可以正常显示,但没有设置字符集行。如果我要添加上面的行,所有这些 un​​icode 字符都会更改为 ?.

顺便说一句,如果你现在在 w3c 验证器上检查页面,它实际上是这样写的:

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

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

有人想知道发生了什么吗?

【问题讨论】:

    标签: html character-encoding


    【解决方案1】:

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

    �kljkjkjk

    Le fran?ais de France, appel? parfois fran?ais m?tropolitain 或 fran?ais hexagonal 或 encore fran?ais norm?, est la vari?t? nationale de la langue fran?aise appartenant? la France。 Dans le contexte des comparaisons entre vari�t�s nationales, on pense habituellement au � fran�ais standard de France

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

    €kljkjkjk

    Le français de France、appelé parfois français métropolitain 或 français hexagonal 或 encore français normé、est la variété nationale de la langue française appartenant à la France。 Dans le contexte des comparaisons entre variétés nationales, on pense habituellement au « français standard de France »

    如果您告诉浏览器您的文档是使用 UTF-8 编码的,但实际上是 ISO 8859-1,那么您会遇到一些麻烦。如果您不指定字符集,则浏览器将进行猜测或使用其默认值;就我而言,默认是 UTF-8,所以默认情况下我搞得一团糟,并强制我的浏览器使用 ISO 8859-1 来解决问题。

    【讨论】:

      【解决方案2】:

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

      您可以使用 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 编码信息正确(严格来说,这是可选的,但对将您的页面保存到文件以供离线阅读的人很有帮助)

      【讨论】:

      • 我认为 ISO-8859-1 仅适用于 ANSI,而不适用于 unicode。不管怎样,我认为 UTF-8 是默认的。输入字符的方式是通过 Firefox 中的 Web 表单,该表单被提交到一个 php 文件,该文件将其添加到数据库中。我不知道如何使文本以 UTF 格式发送。
      • “我认为 ISO-8859-1 仅适用于 ANSI,而不适用于 unicode。”嗯,是的,有点。我假设“ANSI”是指 Windows 的 ANSI 代码页之一。在这种情况下,是的,ISO-8859-1 大致等于 CP 1252(但有些字符不同)。 Unicode 是两者的超集。
      • @Dendory:关于通过网络表单发送的文本的编码:我不是该领域的专家,但我相信通常浏览器会发送具有相同字符的网络表单的内容页面进入的编码。因此,如果您将页面作为 UTF-8 提供,浏览器也应提交带有 UTF-8 文本的表单。
      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2015-10-18
        • 2021-11-16
        • 1970-01-01
        • 2016-03-28
        • 2011-12-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多