使用JavaScript和HTML打印表情符号

时间:2014-03-10 22:07:14

标签: javascript html unicode emoji

为什么这样做:

<p id="emoji">&#x1f604;</p>

这不是:

document.getElementById("emoji").innerHTML = String.fromCharCode(parseInt('1f604', 16));

2 个答案:

答案 0 :(得分:34)

JS术语中的'char'实际上是UTF-16代码单元,而不是完整的Unicode字符。 (这种悲惨的事态源于古代没有差异*。)要使用基本多语言平面以外的字符,你必须用surrogate pair of two 16-bit code units的UTF-16编码形式来编写它。 :

String.fromCharCode(0xD83D, 0xDE04)

在ECMAScript 6中,我们将获得一些接口,让我们处理字符串,就好像它们是完整的Unicode代码点一样,尽管它们不完整,并且只是仍然存储为代码单元序列的String类型的外观。然后我们就能做到:

String.fromCodePoint(0x1F604)

请参阅this question了解一些填充代码,以便在今天的浏览器中使用此功能。

(*:当我进入时间机器时,我将单独离开希特勒,然后再回到发明UTF-8。绝对不能使用UTF-16!)

答案 1 :(得分:6)

如果您不想在代码中加入String.fromCodePoint(),也可以使用hacky方法。它包括创建虚拟元素......

elem=document.createElement('p')

...使用工作HTML填充...

elem.innerHTML = "&#x1f604"

......最后得到它的价值

value = elem.innerHTML

简而言之,这是有效的,因为只要设置了HTML容器的值,该值就会转换为相应的字符。

希望我能提供帮助。