在HTML中显示Unicode符号

110

我想在HTML页面中简单地显示勾号(✔)和叉号(✘),但它显示为方框或混乱的符号 ✔ - 显然与编码有关。

我已经设置了meta标签以显示utf-8,但显然我错过了些什么。

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

编辑/解决方案: 经过评论,我使用FireBug发现我的页面传递的头实际上是“Content-Type:text/html”,而不是UTF-8。 使用Notepad++查看文件格式显示我的文件格式为“UTF-8无BOM”。 将其更改为UTF-8后,符号现在正确显示...但是firebug仍然指示相同的content-type。

5个回答

64

你应该确保HTTP服务器头信息正确。

特别是,要注意以下头信息:

Content-Type: text/html; charset=utf-8

应该存在。

如果HTTP头存在,则浏览器会忽略元标记。

还要确保您的文件在提供之前实际上已编码为UTF-8,请检查/尝试以下内容:

  • 确保您的编辑器将其保存为UTF-8。
  • 确保您的FTP或任何文件传输程序不会干扰文件。
  • 尝试使用HTML编码实体,例如&#uuu;
  • 为了确保,可以对文件进行十六进制转储并查看字符,对于✔,它应该是E2 9C 94。

注意:如果您使用的Unicode字符系统找不到字形(没有具有该字符的字体),则您的浏览器应显示问号或类似块状符号的符号。但是,如果您看到多个罗马字符,就表示存在编码问题。


实际上,元标记并没有被忽略,但是HTTP头部具有优先权。感谢Konrad提供的精确信息。 - Nicolas Goy
11
请注意,在CSS的::before选择器的content属性中使用Unicode字符时,需要使用反斜杠符号表示。例如:使用'\2713'代替'&#2713'。 - Fabien Snauwaert

22

我知道已经有一个答案被接受了,但是我想指出几件事情。

设置content-typecharset显然是一种好的做法,但在服务器端进行这样做要好得多,因为它确保了应用程序中的一致性。

然而,只有当我的应用程序语言使用很多仅在UTF-8字符集中可用的字符时,我才会使用UTF-8。如果你想在某些情况下显示Unicode字符或符号,则可以在不更改页面charset的情况下这样做。

HTML呈现器一直能够显示不属于页面编码字符集的符号,只要提到符号的数字字符引用(NCR)。听起来很奇怪,但这是真的。

因此,即使您的html具有声明为ansi或任何iso字符集的编码头,您也可以使用其HTML字符引用以十进制形式 - &#10003;或十六进制形式 - &#x2713;显示勾选标记。

所以很难理解为什么你在你的页面上遇到了这个问题。你可以检查NCR值是否正确,这是一个很好的参考http://www.fileformat.info/info/unicode/char/2713/index.htm


7
“然而,只有当我的应用程序涉及到许多仅在UTF-8字符集中可用的字符时,我才会使用UTF-8。” 为什么?转换时的缺点是什么? - dumbledad
3
很好的问题,我想我让自己的偏见影响了我的答案。我的意思是,如果你的整个应用程序已经不是utf-8编码,那么为了一个页面而改变整个应用程序可能会太麻烦。此外,如果你的编程语言和内容不需要utf-8字符,你可能会意外复制粘贴一个垃圾字符,而你的编辑器会接受它(因为它处于utf-8模式),但代码在执行时将失败。话虽如此,当你可以的时候,请更新你的编码和字符集。 - Akshay

7

请确保将文件保存为UTF-8格式,或者使用HTML实体(&#nnn;)表示特殊字符。


似乎没有适用于✔的HTML实体,或者我错过了它?如何“实际”将文件保存为UTF-8,以及如何检查? - Peter Craig
@Peter:使用一个好的编辑器。大多数文本编辑器在“另存为”对话框中都有指定文件编码的选项,或者它们在菜单中的其他地方隐藏了另一个选项。Vim使用fileencoding设置。 - Konrad Rudolph
11
@Peter,你可以通过它的编码引用任何字符。尝试使用✔表示勾选符号。 - Dan Dyer
有趣的概念。如果您正在创建静态HTML页面,则效果很好。但是...动态网页呢?这个Unicode / UTF-8 /宽字符的东西对我来说真的很令人困惑。我的后端代码是Perl。HTTP标头已正确设置,HTML标头也是如此。W3C国际化检查器确认我已将文档设置为UTF-8。大小写是否重要?最后,文本输入框怎么办?我仍然得到了一些奇怪的东西!:( - Jarett Lloyd
前面的评论补充:我的数据库显示数据已经正确输入,并且字符也正确显示。因此,这不是数据库问题。我的Perl脚本(或者说编辑器)设置为将脚本保存为UTF-8格式。我相当确定我的服务器Apache2没有干扰或者设置错误。尽管如此,仍然不确定为什么字符会出现混乱。唉,一定有更好的方法。 - Jarett Lloyd

5
与Nicolas提出的不同,浏览器实际上并没有忽略标签。然而,Content-Type HTTP头总是优先于文档中存在标签。
因此,请确保通过HTTP头发送正确的编码,或者根本不发送此HTTP头(不建议)。标签主要是本地文档的备选项,这些文档未通过HTTP流量发送。
应该考虑使用HTML实体作为解决方法 - 这是绕过真正问题的小心翼翼的方式。正确配置Web服务器可以避免很多麻烦。

0

我认为这是一个文件问题,你只是将文件保存为1字节编码,比如latin-1。搜索一下你的编辑器以及如何将文件设置为utf-8。

我想知道为什么会有些编辑器不默认使用utf-8。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接