我想简单地在HTML页面中显示tick(✔)和cross(✘)符号,但它显示为box或goop" - 显然与编码有关.
我已经将元标记设置为显示utf-8,但显然我遗漏了一些东西.
编辑/解决方案:根据发表的评论,使用FireBug我发现我的页面传递的标题实际上是"Content-Type:text/html"而不是UTF-8.使用Notepad ++查看文件格式显示我的文件格式为"UTF-8无BOM".将此更改为UTF-8,符号现在可以正确显示...但是firebug似乎仍然表示相同的内容类型.
您应确保HTTP服务器标头正确无误.
特别是标题:
Content-Type: text/html; charset=utf-8
应该在场.
如果存在HTTP标头,则浏览器会忽略元标记.
还要确保您的文件在提供之前实际编码为UTF-8,请检查/尝试以下操作:
确保您的编辑器将其保存为UTF-8.
确保您的FTP或任何文件传输程序不会弄乱该文件.
尝试使用HTML编码实体,例如uuu;
.
要确定,hexdump文件并看作为角色,对于✔,它应该是E2 9C 94.
注意:如果使用unicode字符,系统无法找到字形(没有该字符的字体),则浏览器应显示问号或某些块,如符号.但是,如果您看到多个罗马字符,则表示编码问题.
我知道答案已被接受,但想指出一些问题.
设置content-type
和charset
显然是一个很好的做法,在服务器上执行它会好得多,因为它可以确保整个应用程序的一致性.
但是,我UTF-8
只会在我的应用程序的语言使用很多只在UTF-8
charset 中可用的字符时使用.如果要在其中一种情况下显示unicode字符或符号,则可以在不更改charset
页面的情况下执行此操作.
HTML
渲染器始终能够显示不属于页面编码字符集的符号,只要您在其中提及符号即可numeric character reference (NCR)
.听起来很奇怪,但确实如此.
因此,即使您html
的标题声明它具有编码ansi
或任何iso
字符集,您也可以使用其html字符引用显示复选标记,十进制 - ✓ 或者以十六进制表示 - ✓
因此,您有点难以理解为什么您在页面上遇到此问题.你能检查NCR值是否正确,这是一个很好的参考资料http://www.fileformat.info/info/unicode/char/2713/index.htm
确保您实际将文件保存为UTF-8,或者使用HTML实体(nnn;
)作为特殊字符.
与Nicolas提出的不同,meta
浏览器实际上并未忽略该标记.但是,Content-Type
HTTP标头始终优先meta
于文档中标记的存在.
因此,请确保您通过HTTP标头发送正确的编码,或者根本不发送此HTTP标头(不推荐).该meta
标签主要是为未通过HTTP发送流量的本地文档的后备选项.
使用HTML实体也应该被视为一种解决方法 - 这是围绕真正的问题悄悄进行的.正确配置Web服务器可以防止很多麻烦.