为什么这样做:
<p id="emoji">😄</p>
这不是:
document.getElementById("emoji").innerHTML = String.fromCharCode(parseInt('1f604', 16));
答案 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 = "😄"
......最后得到它的价值
value = elem.innerHTML
简而言之,这是有效的,因为只要设置了HTML容器的值,该值就会转换为相应的字符。
希望我能提供帮助。