将Unicode字符插入JavaScript

Blu*_*ire 118 html javascript unicode

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

rua*_*akh 180

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

var Omega = '\u03A9';
Run Code Online (Sandbox Code Playgroud)

(由于Ω是Unicode字符与代码点U + 03A9 ;也就是说,03A9937,除了写为四个十六进制数字)

  • 如果想知道unicode字符串的十六进制值是什么:https://mothereff.in/js-escapes (4认同)

Juk*_*ela 48

虽然@ruakh给出了一个很好的答案,但我会为完整性添加一些替代方案:

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

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

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

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

使用\u符号,如同,在var Omega = '\u03A9'独立于字符编码的情况下工作,实际上它几乎是通用的.然而,它可以如此使用直到U + FFFF,即最多\uffff,但大多数人听说过的大多数字符落入该区域.(如果您需要"更高"字符,则需要使用代理对或上述两种方法之一.)

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

  • 时代已经改变了,5年后,人们在"U + FFFF"范围之外使用这些被称为"表情符号"的东西.JavaScript也有,所以你可以做到这一点.`var poop ='\ u {1F4A9}';` (13认同)
  • @tarekahf 这是关于 Unicode 的简短课程。UTF-16 仅跨越 Unicode 点 U+0000 到 U+FFFF。然后 Unicode 发展起来并发明了代理,因此 UTF-16 可以访问这些点。但是 JavaScript 现在可以做到这一点: `var lock = '\u{1F512}'` 你会得到: (8认同)
  • @Userthatisnotauser 和 _that_ 应该是公认的答案! (2认同)

col*_*fix 7

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

const omega = '?';
Run Code Online (Sandbox Code Playgroud)

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

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

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

// or:

const omega = String.fromCodePoint(0x3a9);
Run Code Online (Sandbox Code Playgroud)

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

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


fre*_*sko 5

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

"This string contains omega, that looks like this: \u03A9"
Run Code Online (Sandbox Code Playgroud)

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

  • 表情符号使这些代码更难输入!`\u{1F641}` = (10认同)