【问题标题】:chars by unicode not appear on htmlunicode的字符不会出现在html上
【发布时间】:2021-06-13 23:05:53
【问题描述】:

我试图获取“????”的Unicode带有javascript的表情符号,但当我尝试将其添加为HTML时没有出现,很多表情符号没有出现

var x="A".charCodeAt(0);
document.write(x); // gaves 65

A给了A

var y="????".charCodeAt(0);
document.write(y); // gaves 55358

�没给????

是什么原因?

【问题讨论】:

  • 无效herethere
  • charCodeAt 返回一个 UTF-16 代码单元,而不是一个字符(参见 MDN 上的文档)。表情符号不在基本的多语言计划中,因此它们需要两个代码单元。

标签: javascript html unicode


【解决方案1】:

JavaScript 中的字符(或代码点)由代码单元组成。有时,一个代码点由一个代码单元组成。例如,“a”的代码点由一个代码单元(97 或 0x61)组成。然而,其他代码点由两个代码单元(称为代理对)组成,它们一起工作以形成单个字符。例如,您在问题中分享的 Thinking Face 表情符号 (?) 由两个代码单元组成,当它们配对在一起时,会形成一个代码点来形成思考面表情符号。你可以通过 .length 看到它:

console.log("?".length); // 2 (as made up of two code points)
console.log("?".charCodeAt(0)); // 55358 or 0xD83E
console.log("?".charCodeAt(1)); // 56596 or 0xDD14

当您使用.charCodeAt() 时,您正在访问字符串元素的代码单元。如上所示,"?" 包含两个代码单元,0xD83E (55358) 和 0xDD14 (56596)。 .charCodeAt(0) 返回的第一个代码单元仅在与其他代码单元一起使用时才有意义,因此它不能独立工作,这就是您在结果中获得替换字符符号 (�) 的原因:

console.log("?"[0], "?"[1]); // � �

而不是使用.chartCodeAt()获得的单个代码单元,可以显示整个代码点(即:字符),可以使用.codePointAt()获得:

console.log("?".codePointAt(0)); // 129300 or 0x1F914

然后,您可以将此数字用作 HTML 实体:

<p>🤔</p>

【讨论】:

    【解决方案2】:

    这个表情符号:? 有一个十进制(dec)引用 129300。如果你希望它显示在你的 HTML 中,试试这个:

    <p>🤔</p>

    有关 dec 参考的完整列表,请访问 w3schools' website

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多