169

我需要在我的 html 页面上插入一个 Omega (Ω)。我正在使用它的 HTML 转义代码来执行此操作,因此我可以编写Ω并获取 Ω。当我将它放入 HTML 元素时,一切都很好;但是,当我尝试将其放入我的 JS 中时,例如var Omega = Ω,它会将代码解析为 JS 并且整个事情都不起作用。有人知道该怎么做吗?

4

4 回答 4

249

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

var Omega = '\u03A9';

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

于 2012-10-26T19:24:01.423 回答
59

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

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

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

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

您也可以输入 Ω 字符,例如 in 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 编号,也可以使用此方法。

于 2012-10-26T21:26:55.540 回答
10

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

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
于 2020-08-24T22:35:06.440 回答
5

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

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

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

于 2016-04-15T09:12:55.473 回答