【问题标题】:Printing emojis with JavaScript and HTML使用 JavaScript 和 HTML 打印表情符号
【发布时间】:2014-04-14 06:37:44
【问题描述】:

为什么会这样:

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

这不是:

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

【问题讨论】:

  • 欢迎来到恐怖的 UTF-16 和代理对。

标签: javascript html unicode emoji


【解决方案1】:

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 获取一些 polyfill 代码,让您在当今的浏览器中使用此功能。

(*:当我可以使用时间机器时,我会离开希特勒,然后回去早点发明 UTF-8。UTF-16 一定从来没有!)

【讨论】:

    【解决方案2】:

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

    elem=document.createElement('p')

    ...用工作 HTML 填充它...

    elem.innerHTML = "&amp;#x1f604"

    ...最终得到它的价值

    value = elem.innerHTML

    简而言之,这是因为,一旦您设置了 HTML 容器的值,该值就会被转换为相应的字符。

    希望我能帮上忙。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-29
      • 1970-01-01
      • 2019-01-03
      • 2021-10-25
      相关资源
      最近更新 更多