首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使一个字符跳出基本的多语言平面?

如何使一个字符跳出基本的多语言平面?
EN

Stack Overflow用户
提问于 2012-11-03 07:27:09
回答 3查看 1.2K关注 0票数 2

对于基本多语言平面中的字符,我们可以使用'\uxxxx‘对其进行转义。例如,您可以使用/\u4e00-\u9fff/匹配常用中文字符(0x4e00-0x9fff是CJK统一表意文字的范围)。

但对于基本多语种平面外的字符,其编码大于0xffff。因此您不能使用格式'\uxxxx‘对其进行转义,因为'\u20000’表示字符'\u2000‘和字符'0',而不是代码为0x20000的字符。

如何将字符转义出基本的多语言平面?直接使用这些字符不是一个好主意,因为它们不能在大多数字体中显示。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-11-03 14:54:02

您可以使用一对转义的代理代码点,如@duskwuff的答案中所述。您可以使用my Full Unicode input utility来获取符号(按钮“Show\u”),或者使用Fileformat.info character search来查找它们(项“C/C++/Java源代码”,因为JavaScript在这里使用了相同的符号)。

或者,您可以直接输入字符:“您可以将非BMP字符这样输入到JavaScript代码中的字符串文字中,无论是在单独的文件中还是作为嵌入在HTML中。当然,您需要在所使用的编辑器中提供适当的Unicode支持。但是JavaScript实现不需要在程序源中支持非BMP字符。它们可能会,而且现代浏览器实现通常都是这样的。(使用JavaScript和Globalize.js走向全球,第177页)有一些注意事项,比如正确声明字符编码。

字体支持是一个不同的问题,但在处理字符时,您通常希望在某个时候看到它们,至少在测试中是这样。因此,您或多或少需要一些覆盖字符的字体。Fileformat.info页面还包含指向浏览器支持信息(如(U+20000) Font Support )的链接,这是一个很好的起点,但还不够完整。例如,在模拟SimSun ExtB中也支持U+20000 ''

票数 1
EN

Stack Overflow用户

发布于 2012-11-03 07:48:10

BMP之外的字符不能被Javascript直接识别--它们在内部表示为UTF-16代理对。例如,您提到的字符U+20000 (当前分配给"CJK统一表意文字分机B")表示为代理项对U+D840 U+DC00。作为一个Javascript字符串,这将是简单的"\u2840\uDC00"。(请注意,此字符串的s.length为2,即使它显示为单个字符。)

Wikipedia has details on the encoding scheme used.

票数 2
EN

Stack Overflow用户

发布于 2016-09-17 12:01:50

有趣的问题。

现在我们有了ES6we can do this

代码语言:javascript
复制
let newSpeak = '\u{1F4A9}'

注意,在内部,它仍然是带有surrogate pairsUTF-16

代码语言:javascript
复制
newSpeak.length === 2 // "wrong"
[...newSpeak].length === 1
newSpeak === '\uD83D\uDCA9'

Unicode is huge

而且,这不仅仅是字面上的:

代码语言:javascript
复制
newSpeak.charCodeAt(0) === 0xD83D // "wrong"
newSpeak.codePointAt(0) === 0x1F4A9

String.fromCharCode(0x1F4A9) !== newSpeak
String.fromCodePoint(0x1F4A9) === newSpeak

for (let i = 0; i < newSpeak.length; i++) console.log(newSpeak[i]) // "wrong"
for (let c of newSpeak) console.log(c)

[...''].map(c => `__${c}`).join('') === "____"

I�处理Unicode。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13204412

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档