在HTML中显示Unicode符号


89

我只想在HTML页面中显示刻度符号(✔)和叉号(✘),但它显示为方框或粘稠度–显然与编码有关。

我已将meta标签设置为显示utf-8,但显然我遗漏了一些东西。

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

编辑/解决方案:通过使用FireBug所做的评论,我发现页面传递的标题实际上是“ Content-Type:text / html”,而不是UTF-8。使用Notepad ++查看文件格式时,显示我的文件格式为“没有BOM的UTF-8”。现在将其更改为UTF-8,符号现在可以正确显示...但是萤火虫似乎仍指示相同的内容类型。

Answers:


56

您应该确保HTTP服务器标头正确。

特别是标题:

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

应该存在。

如果存在HTTP标头,则浏览器将忽略meta标签。

另外,在提供文件之前,请确保文件实际上已编码为UTF-8,请检查/尝试以下操作:

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

注意:如果您使用系统无法找到字形的unicode字符(该字符没有字体),则浏览器应显示一个问号或一些类似符号的块。但是,如果像您一样看到多个罗马字符,则表示编码有问题。


实际上,不会忽略meta标记,但是HTTP标头具有优先权。感谢Konrad的精确度。

8
请注意,要在contentCSS::before选择器的属性中使用unicode字符,则需要使用反斜杠表示法。例如:'\ 2713'而不是'&#2713'。
Fabien Snauwaert '16

18

我知道答案已经被接受,但想指出一些问题。

设置content-typeandcharset显然是一个好习惯,在服务器上进行设置要好得多,因为它可以确保整个应用程序的一致性。

但是,UTF-8仅当我的应用程序的语言使用了很多只能在UTF-8字符集中使用的字符时,我才使用它。如果您想在其中一种情况下显示unicode字符或符号,则可以不更改charset页面大小而这样做。

HTML渲染器始终能够显示不属于页面编码字符集的符号,只要您在页面中提及该符号即可numeric character reference (NCR)。听起来很奇怪,但这是真的。

因此,即使您html的标头指出其编码为ansi或任何iso字符集,也可以使用其html字符引用以十进制显示复选标记-&#10003; 或十六进制-&#x2713;

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


6
“但是,仅当我的应用程序的语言使用很多仅在UTF-8字符集中可用的字符时,我才使用UTF-8”。切换的缺点是什么?
dumbledad 2015年

3
@dumbledad:非常好的问题,我想我会让自己的偏见笼罩我的答案。我的意思是,如果您的整个应用程序都已经不是utf-8,那么将其更改为单个页面的应用程序视频可能会太多。另外,如果您的编程语言和内容不需要utf-8字符,则您可能会意外地复制粘贴一个垃圾字符,您的编辑器将可以使用该字符(因为它处于utf-8模式),但是代码在执行期间将失败。话虽如此,但您可以的话,请更新您的编码和字符集
Akshay

6

确保您实际上将文件另存为UTF-8,或者&#nnn;对特殊字符使用HTML实体()。


似乎没有✔的HTML实体,或者我错过了吗?您如何“实际上”将文件另存为UTF-8,又如何检查?
彼得·克雷格

@Peter:使用体面的编辑器。大多数文本编辑器在“另存为”对话框中都有一个选项来指定文件编码,或者在菜单中的某个位置隐藏了另一个选项。Vim使用该fileencoding设置。
康拉德·鲁道夫

8
@Peter,您可以通过其代码引用任何字符。尝试&#x2714; 一会儿。
丹·代尔

另存为utf-8。有趣的概念。如果要创建静态HTML页面,效果很好。但是...动态网页呢?这个unicode / utf-8 / wide字符的东西确实让我感到困惑。我的后端代码是perl。http标头已正确设置,html标头也已正确设置。W3C国际化检查器确认我已将文档设置为utf-8。CaSinG重要吗?最后,文本输入框呢?我仍然会哭!:(
贾里特·劳埃德

以前的注释的附录:我的数据库显示数据输入正确,字符正确显示。因此,不是数据库问题。我的perl脚本(或更确切地说是编辑器)设置为将脚本另存为utf-8。我的服务器apache2,我相当确定没有干扰,或者设置正确。所有这些都说,仍然不确定为什么字符会变得糟糕。啊。必须有更好的方法
Jarett Lloyd

5

与尼古拉斯的提议不同, meta浏览器实际上不会忽略标签。但是,Content-TypeHTTP标头始终优先meta于文档中标记的存在。

因此,请确保您通过HTTP标头发送正确的编码,或者根本不发送此HTTP标头(不建议)。该meta标签主要是为未通过HTTP发送流量的本地文档的后备选项。

使用HTML实体也应被视为一种解决方法-围绕着真正的问题tip之以鼻。正确配置Web服务器可以避免很多麻烦。


0

我认为这是一个文件问题,您可以简单地将文件保存为类似于latin-1的1字节编码。Google打开您的编辑器,以及如何将文件设置为utf-8。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.