将 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 我不知道 我猜您实际上希望Omega
是一个包含 大写欧米茄的字符串?在这种情况下,你可以写:
var Omega = '\u03A9';
(因为 Ω 是 the Unicode character with codepoint U+03A9;也就是说,03A9
是 937
,除了写成四个十六进制数字。)
【讨论】:
如果想知道 unicode 字符串的十六进制值是什么:mothereff.in/js-escapes 从 javascript 中获取 unicode 字符串的十六进制值的另一种方法是:"Ω".codePointAt(0).toString(16);【参考方案2】:虽然@ruakh 给出了一个很好的答案,但为了完整起见,我会添加一些替代方案:
实际上,您甚至可以在 JavaScript 中使用 var Omega = 'Ω'
,但前提是您的 JavaScript 代码是:
onclick="var Omega = 'Ω';
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字符串转换为ascii [重复]