在 HTML 中显示 unicode 符号

问题描述 投票:0回答:6

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

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

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

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

html unicode
6个回答
64
投票

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

特别是标题:

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

应该存在。

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

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

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

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


22
投票

我知道答案已被接受,但想指出一些事情。

设置

content-type
charset
显然是一个很好的做法,在服务器上进行要好得多,因为它可以确保整个应用程序的一致性。

但是,只有当我的应用程序的语言使用大量仅在

UTF-8
字符集中可用的字符时,我才会使用
UTF-8
。如果您想在其中一种情况下显示 unicode 字符或符号,则无需更改页面的
charset
即可实现。

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

因此,即使您的

html
的标头声明其具有
ansi
编码或任何
iso
字符集,您也可以使用其 html 字符引用(以十进制 - ✓ 或以十进制形式显示复选标记)十六进制 - ✓

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


7
投票

确保您确实将文件保存为 UTF-8,或者使用 HTML 实体 (

&#nnn;
) 来表示特殊字符。


5
投票

与 Nicolas 提出的不同,浏览器实际上并没有忽略

meta
标签。但是,
Content-Type
HTTP 标头始终优先于文档中存在的
meta
标记。

因此请确保您通过 HTTP 标头发送正确的编码,或者根本不发送此 HTTP 标头(不推荐)。

meta
标签主要是不通过 HTTP 流量发送的本地文档的后备选项。

使用 HTML 实体也应该被视为一种解决方法——这是小心翼翼地绕过真正的问题。正确配置网络服务器可以防止很多麻烦。


0
投票

我认为这是一个文件问题,您只需将文件保存为 1 字节编码(例如 latin-1)即可。谷歌搜索你的编辑器以及如何将文件设置为 utf-8。

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


0
投票

晚了几年 - 只是为了澄清答案中遗漏的一些内容,以防有人想知道为什么他们的 unicode 编码仍然不起作用。

&#uuuu;中的uuuu是十进制数:不是十六进制数。如果您查找支票和交叉,您可能会发现网站会说是 2713 和 2717。 ઙ 会给您 ઙ ,ઝ 会给您 ઝ

拿出一个十六进制计算器并计算出十进制等值。

2713 hex = 10003 decimal
2717 hex = 10007 decimal

使用 ✓ 得到 ✓,使用 ✗ 得到 ✗

© www.soinside.com 2019 - 2024. All rights reserved.