在 JavaScript 中插入 Unicode字符

我需要插入一个 Ω (& # 937;)到我的 html 页面。我使用它的 HTML 转义代码来做到这一点,所以我可以写 Ω和获得 & # 937;。当我把它放到一个 HTML 元素中时,这一切都很好; 但是,当我试图把它放到我的 JS 中时,例如 var Omega = Ω,它会将代码解析为 JS,整个过程就不能工作了。有人知道该怎么做吗?

198863 次浏览

我猜你实际上是想让 Omega成为一个 包含和一个大写的 omega,在这种情况下,你可以这样写:

var Omega = '\u03A9';

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

编辑添加 (在2022年) : 现在有一种替代形式更好地支持 U + FFFF 之上的代码点:

let Omega = '\u{03A9}';
let desertIslandEmoji = '\u{1F3DD}';

https://caniuse.com/mdn-javascript_builtins_string_unicode_code_point_escapes来看,大多数或所有浏览器在2015年都增加了对它的支持,所以使用它应该是相当安全的。

虽然@ruakh 给出了一个很好的答案,但是为了完整起见,我还是要补充一些备选方案:

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

  • 在事件属性中,如 < code > onclick = “ var Omega =’& # 937’; 警报(Omega)” 或
  • 在 XHTML (或 XHTML + XML)文档内的 script元素中 使用 XML 内容类型服务。

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

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

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

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

不幸的是,这些 ASCII 代码仍然需要显示 UTF-8,但我仍然在等待(因为太多年...)的一天,UTF-8将与 ASCII 是一样的,ASCII 将只是过去的记忆。

其中一个选择就是把角色直接放进你的剧本里,例如:

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

我发现这个问题时,试图实现一个可怕的字体样式图标系统在 html。我有一个 API,它为我提供了一个十六进制字符串,我需要将其转换为 Unicode 来匹配字体家族。

假设我有来自 API 的字符串 const code = 'f004';。我不能做简单的字符串串联(const unicode = '\u' + code;) ,因为系统需要识别它是 unicode,如果您尝试这样做,实际上会导致语法错误。

@ coldfix 提到使用 String.fromCodePoint,但它使用一个数字作为参数,而不是字符串。

要最终跨越终点线,只需添加 parseInt并将 16(因为十六进制是以16为基数)传递给它的第二个参数。最后,您将从一个简单的十六进制字符串中获得一个 unicode 字符串。

我就是这么做的:

const code = 'f004';
const toUnicode = code => String.fromCodePoint(parseInt(code, 16));


toUnicode(code);
// => '\uf004'

尝试使用 Function () ,如下所示:

var code = "2710"
var char = Function("return '\\u"+code+"';")()

它工作得很好,只是不要添加任何的或“ s 或空格。

在这个例子中,char 是“ something”。