8

我正在使用一个网页,其中我将字符集从 iso-8859-1 切换到 utf-8。页面顶部是这样的:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>[title of site]</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

我只在页面中使用 ASCII 字符,并且由于 utf-8 编码超集 ASCII,这应该没问题。但是,文本中的单引号显示为被黑色菱形包围的问号。我已经验证这些是 ASCII 单引号(不是直引号)。

我在网上阅读了很多描述涉及 PHP、魔术引号、数据库配置等问题的解决方案。但是,这是一个没有被任何程序呈现的平面 HTML 页面。

此外,许多遇到此问题的人被告知切换到 UTF-8 来解决问题。这正是我介绍问题的方式。

请查看http://mch.blackcatwebinc.com/src/events.html以查看此问题。

4

6 回答 6

9

ASCII 中唯一的引号是单引号 ' (0x27 或 39)和双引号 " (0x22 或 33)。您所拥有的是一个 8 位编码,将引号置于 145 (0x91) 和 146 (0x92) 称为CP1252;它是 Windows 的标准 8 位西欧编码。如果您想要的是 UTF-8,则需要将其转换为 UTF-8,因为它不是有效的 UTF-8;有效的 UTF-8 使用多个字节作为字符高于 127 (0x7F),并将开盘价和收盘价分别置于 U+2018 和 U+2019。

于 2012-08-03T05:12:58.483 回答
2

根据 W3C,meta charset

应该尽可能靠近头部元素的顶部

来自http://www.w3.org/International/questions/qa-html-encoding-declarations#metacontenttype

所以,我可能会尝试将meta标签放在title.

此外,正如@user1505373 在第一个答案中提到的那样,在我看到的任何示例中,UTF总是大写并且在之后没有空格。=

于 2012-08-03T03:42:50.307 回答
1

meta最简单的解决方法是在标签中将 UTF-8 更改为 windows-1252 。这是可行的,因为服务器在Content-Type标头中声明没有编码,因此浏览器和其他客户端将使用meta标签中指定的编码。

名称 windows-1252 是 8 位 Windows Latin-1 编码的首选 MIME 名称,也称为 cp1252 和一些其他名称(通常误称为“ANSI”)。

正如@deceze 解释的那样,数据的实际编码是 windows-1252,而不是 UTF-8。您也可以通过在创作软件中使用合适的命令保存文件来将实际编码更改为 UTF-8。但真正重要的是声明的编码与真实的编码匹配。

还有一种可能性是对撇号使用“转义符”,例如&rsquo;. 它们独立于编码工作,但它们使源代码不那么清晰。

于 2012-08-03T10:46:14.123 回答
1

您的源代码不是以 UTF-8 而是以Latin1 CP1252 保存的,并且那些引号不是简单的引号而是 U+2019 右单引号(以 Latin1 编码)。将源文件保存为 UTF-8 即可。

于 2012-08-03T06:07:33.207 回答
0

所有 ASCII 可打印字符都有其等效的 HTML 实体代码。其中一些字符通常由最常见的 OS 字体支持,一些被归类为符号,这些字符将我们带到您的渲染问题。

您应该有一个单引号,为了正确打印它,您应该使用它的实体代码或 ’ 分别。如果它变成一个单引号,那么你应该使用 ‘ 反而。

请注意,两个ASCII字符(以及更多字符)没有 HTML 实体名称,因此您需要选择实体代码变体。

于 2012-08-03T04:31:29.227 回答
0

我看到你的标签和我正在处理的网站上的标签之间的唯一区别是分号后面的空格,而你的 utf 是小写的。尝试大写 UTF。

于 2012-08-03T03:23:50.727 回答