将 Unicode 字符插入 JavaScript

Posted

技术标签:

【中文标题】将 Unicode 字符插入 JavaScript【英文标题】:Insert Unicode character into JavaScript 【发布时间】:2012-10-17 02:02:30 【问题描述】:

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

【问题讨论】:

var Omega = "Ω"; 太简单了? 记事本不接受,它只是写一个 O :P @MikeMcCaughan 是的,但是如果其他开发人员弄乱了源文件的编码,你就输了......你总是会有人说“OOOOps 我不知道 使用 CP1250 作为默认编码,我没有注意到提交时的小变化”或“字符编码是什么?” ;=) @Bluefire 切换到支持设置字符编码的更好的文本编辑器(例如 notepad++)并将其设置为 UTF-8。然后,您可以根据需要在源代码中编写中文... @Bluefire,Notepad++ 应该可以很好地处理它,您只需将菜单中的编码更改为 UTF-8 或 UCS-2。 【参考方案1】:

我猜您实际上希望Omega 是一个包含 大写欧米茄的字符串?在这种情况下,你可以写:

var Omega = '\u03A9';

(因为 Ω 是 the Unicode character with codepoint U+03A9;也就是说,03A9937,除了写成四个十六进制数字。)

【讨论】:

如果想知道 unicode 字符串的十六进制值是什么:mothereff.in/js-escapes javascript 中获取 unicode 字符串的十六进制值的另一种方法是:"Ω".codePointAt(0).toString(16);【参考方案2】:

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

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

在事件属性中,如onclick="var Omega = '&#937'; alert(Omega)" 或 在 XHTML(或 XHTML + XML)文档内的 script 元素中 以 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 = '\u1F4A9'; @Userthatisnotauser 和 that 应该是公认的答案! 如何使用 JavaScript 中的“0x1F512”这一代码插入“开锁”字符“\uD83D\uDD13”?为什么我们需要两个代码来插入一个字符? @tarekahf 这是关于 Unicode 的简短课程。 UTF-16 仅跨越 Unicode 点 U+0000 到 U+FFFF。然后 Unicode 发展并发明了代理,因此 UTF-16 可以访问这些点。但是 JavaScript 现在可以做到这一点:var lock = '\u1F512' 你会得到这个:?【参考方案3】:

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

const omega = 'Ω';

这需要你让浏览器知道正确的源编码,见Unicode in JavaScript

但是,如果您不能或不想这样做(例如,因为字符太奇特,无法在代码编辑器字体中使用),最安全的选择可能是使用 new -style 字符串转义或String.fromCodePoint:

const omega = '\u3a9';

// or:

const omega = String.fromCodePoint(0x3a9);

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

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

【讨论】:

【参考方案4】:

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

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

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

【讨论】:

Emoji 使这些代码更难输入! \u1F641 = ?

以上是关于将 Unicode 字符插入 JavaScript的主要内容,如果未能解决你的问题,请参考以下文章

将字符串插入 SQLAlchemy Unicode 列的正确方法

JavaScript中的Unicode组成

javascript - 如何将unicode字符串转换为ascii [重复]

Javascript RegExp + 单词边界 + unicode 字符

将 unicode 文本插入 pyx 画布

Javascript:Unicode字符串到十六进制