我正在使用一个网页,我将字符集从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来解决问题。这正是我引入问题的方式。
答案 0 :(得分:6)
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。
答案 1 :(得分:2)
根据W3C,meta charset
应尽可能靠近头部元素的顶部
来自http://www.w3.org/International/questions/qa-html-encoding-declarations#metacontenttype
因此,我可能会尝试将meta
标记放在title
上方。
另外,正如@ user1505373在第一个回答中提到的那样,UTF
始终大写,并且在我看到的任何示例中=
之后都没有空格。
答案 2 :(得分:1)
您的源代码 不 以UTF-8保存,但 Latin1 CP1252,这些引号 不是< / em> 简单的引号,但U + 2019 RIGHT SINGLE QUOTATION MARKS(以Latin1编码)。将源文件保存为UTF-8,它将起作用。
答案 3 :(得分: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。但真正重要的是声明的编码与真实编码匹配。
另一种可能性是对撇号使用“转义”,例如’
。它们独立于编码工作,但它们使源代码不太清晰。
答案 4 :(得分:0)
我看到你的标签和我正在处理的网站上的标签之间的唯一区别是分号后的空格和你的小写字母是小写的。尝试大写UTF。
答案 5 :(得分:0)
所有ASCII可打印字符都具有等效的HTML实体代码。其中一些字符通常受大多数常见操作系统字体的支持,有些字体被归类为符号,它们将我们带入渲染问题。
你应该有一个关闭单引号,并且为了正确打印它你应该使用它的实体代码,或者&amp;#146;分别。 如果它变为打开单引号,那么你应该使用&amp;#145;代替。
请注意,两个 ASCII 字符(以及some more)没有HTML实体名称,因此您需要选择实体代码变体。