将 Unicode 字符插入 JavaScript

IT技术 javascript html unicode
2021-01-22 17:06:20

我需要在我的 html 页面上插入一个 Omega (Ω)。我正在使用它的 HTML 转义代码来做到这一点,所以我可以编写Ω并获取 Ω。当我把它放入一个 HTML 元素时,这一切都很好;但是,当我尝试将它放入我的 JS 中时,例如var Omega = Ω,它将该代码解析为 JS 并且整个过程不起作用。有谁知道该怎么做?

4个回答

我猜你真的想Omega成为一个包含大写 omega字符串在这种情况下,您可以编写:

var Omega = '\u03A9';

(因为 Ω 是具有代码点 U+03A9 的 Unicode 字符;也就是说,03A9937,除了写为四个十六进制数字。)

从 JavaScript 中导出 unicode 字符串的十六进制值的另一种方法是: "Ω".codePointAt(0).toString(16);
2021-03-18 17:06:20
如果想知道 unicode 字符串的十六进制值是什么:mothereff.in/js-escapes
2021-03-19 17:06:20

尽管@ruakh 给出了一个很好的答案,但为了完整起见,我将添加一些替代方案:

事实上,您甚至可以var Omega = 'Ω'在 JavaScript 中使用,但前提是您的 JavaScript 代码是:

  • 在事件属性内,如在onclick="var Omega = '&#937'; alert(Omega)"
  • scriptXHTML(或 XHTML + XML)文档内的元素中,使用 XML 内容类型。

在这些情况下,代码将首先(在传递给 JavaScript 解释器之前)由 HTML 解析器解析,以便Ω识别字符引用在大多数情况下,这些限制使这成为一种不切实际的方法。

您也可以输入 Ω 字符,例如在 中var Omega = 'Ω',但是字符编码必须允许,必须正确声明编码,并且您需要允许您输入此类字符的软件。如果您对所有内容都使用 UTF-8 编码并准备好处理由此产生的问题,那么这是一个干净的解决方案并且非常可行。源代码将是可读的,阅读它,您会立即看到字符本身,而不是代码符号。另一方面,如果其他人开始使用您的代码,则可能会引起意外。

使用\u符号,如var Omega = '\u03A9',独立于字符编码工作,它在实践中几乎是通用的。然而,它最多只能用于 U+FFFF,即最多\uffff,但大多数人听说过的大多数字符都属于该区域。(如果您需要“更高”的字符,则需要使用代理对或上述两种方法之一。)

您还可以使用该String.fromCharCode()方法构造一个字符,将 Unicode 数字作为参数传递,以十进制为 invar Omega = String.fromCharCode(937)或以十六进制为 in var Omega = String.fromCharCode(0x3A9)这适用于 U+FFFF。即使变量中有 Unicode 编号,也可以使用这种方法。

@Userthatisnotauser应该是公认的答案!
2021-03-15 17:06:20
现在时代变了,5 年后,人们在U+FFFF范围之外使用这些称为“表情符号”的东西JavaScript 也有,所以你可以这样做。var poop = '\u{1F4A9}';
2021-04-10 17:06:20
如何使用 JavaScript 中的“0x1F512”代码插入“开锁”字符“\uD83D\uDD13”?为什么我们需要两个代码来插入一个字符?
2021-04-11 17:06:20
@tarekahf 这是关于 Unicode 的简短课程。UTF-16 仅跨越 Unicode 点 U+0000 到 U+FFFF。然后 Unicode 发展起来并发明了代理,因此 UTF-16 可以访问这些点。但是 JavaScript 现在可以做到这一点:var lock = '\u{1F512}'你会明白:🔓
2021-04-11 17:06:20

一种选择是将字符按字面意思放入脚本中,例如:

const omega = 'Ω';

这要求您让浏览器知道正确的源编码,请参阅JavaScript 中的 Unicode

但是,如果您不能或不想这样做(例如,因为字符太奇特并且不能期望在代码编辑器字体中可用),最安全的选择可能是使用新样式字符串逃脱或String.fromCodePoint

const omega = '\u{3a9}';

// or:

const omega = String.fromCodePoint(0x3a9);

这不限于 UTF-16,而是适用于所有 unicode 代码点。相比之下,这里提到的其他方法有以下缺点:

  • HTML 转义 ( const omega = '&#937';):仅在 HTML 元素中呈现未转义时才有效
  • 旧式字符串转义 ( const omega = '\u03A9';):仅限于 UTF-16
  • String.fromCharCode: 仅限于 UTF-16

答案是正确的,但您不需要声明变量。字符串可以包含您的字符:

"This string contains omega, that looks like this: \u03A9"

不幸的是,显示 UTF-8 仍然需要 ASCII 中的那些代码,但我仍在等待(因为太多年了......)UTF-8 将与 ASCII 相同的那一天,而 ASCII 将只是对过去的。

表情符号使这些代码更难输入!\u{1F641}= 🙁
2021-03-27 17:06:20