Javascript 如何从基本的多语言平面中转义角色?

Javascript 如何从基本的多语言平面中转义角色?,javascript,unicode,non-english,astral-plane,Javascript,Unicode,Non English,Astral Plane,对于基本多语言平面中的字符,我们可以使用“\uxxx”对其进行转义。例如,您可以使用/[\u4e00-\u9fff]/匹配常用汉字0x4e00-0x9fff是CJK统一表意文字的范围 但对于基本多语言平面之外的字符,其代码大于0xffff。因此不能使用格式“\uxxx”对其进行转义,因为“\u20000”表示字符“\u2000”和字符“0”,而不是代码为0x20000的字符 如何从基本的多语言平面中转义字符?直接使用这些字符不是一个好主意,因为它们不能在大多数字体中显示。Javascript无法

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

但对于基本多语言平面之外的字符,其代码大于0xffff。因此不能使用格式“\uxxx”对其进行转义,因为“\u20000”表示字符“\u2000”和字符“0”,而不是代码为0x20000的字符


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

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


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


您可以使用一对转义的代理代码点,如@Dashwuff的回答中所述。您可以使用my获取符号按钮“Show\u”,或者使用Fileformat.info查找“C/C++/Java源代码”项,因为JavaScript在这里使用相同的符号

或者,您可以直接输入字符:“您可以在JavaScript代码的字符串文本中输入非BMP字符,无论是在单独的文件中还是嵌入在HTML中。当然,您需要在所使用的编辑器中提供适当的Unicode支持。但是JavaScript实现不需要在程序源中支持非BMP字符。它们可以,而且通常是现代浏览器实现。”使用JavaScript和Globalize.js实现全局性,第177页有一些警告,比如正确声明字符编码


字体支持是一个不同的问题,但在处理字符时,您通常希望在某个时候看到它们,至少在测试中是这样。因此,您或多或少需要一些涵盖字符的字体。Fileformat.info页面还包含指向浏览器支持信息的链接,例如–这是一个很好的起点,但不是很完整例如,U+20000'您可以使用一对转义的代理代码点,如@Dashwuff的回答中所述。您可以使用my来获取标记按钮“Show\U”,或者使用Fileformat.info来查找项目“C/C++/Java源代码”,因为JavaScript在这里使用相同的标记

或者,您可以直接输入字符:“您可以在JavaScript代码的字符串文本中输入非BMP字符,无论是在单独的文件中还是嵌入在HTML中。当然,您需要在所使用的编辑器中提供适当的Unicode支持。但是JavaScript实现不需要在程序源中支持非BMP字符。它们可以,而且通常是现代浏览器实现。”使用JavaScript和Globalize.js实现全局性,第177页有一些警告,比如正确声明字符编码

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

现在我们有了:

请注意,在内部,它仍然具有:

此外,不仅仅是文字:

newSpeak.charCodeAt0==0xD83D//错误 newSpeak.codePointAt0==0x1F4A9 String.fromCharCode0x1F4A9!==newSpeak String.fromCodePoint0x1F4A9==新话 对于let i=0;i 现在我们有了:

请注意,在内部,它仍然具有:

此外,不仅仅是文字:

newSpeak.charCodeAt0==0xD83D//错误 newSpeak.codePointAt0==0x1F4A9 String.fromCharCode0x1F4A9!==newSpeak String.fromCodePoint0x1F4A9==新话 对于let i=0;i[…'@millimoose呃,但这个问题是关于javascript的,不是关于java的。哎哟,我的错。不过,你可能在那里也被搞砸了;如果不是更糟的话。相关:@millimoose呃,但这个问题是关于javascript的,不是关于java的。哎哟,我的b 不过,你可能在那里也被搞砸了;如果不是更相关的话:
let newSpeak = '\u{1F4A9}'
newSpeak.length === 2 // "wrong"
[...newSpeak].length === 1
newSpeak === '\uD83D\uDCA9'