Javascript 如何从基本的多语言平面中转义角色?
对于基本多语言平面中的字符,我们可以使用“\uxxx”对其进行转义。例如,您可以使用/[\u4e00-\u9fff]/匹配常用汉字0x4e00-0x9fff是CJK统一表意文字的范围 但对于基本多语言平面之外的字符,其代码大于0xffff。因此不能使用格式“\uxxx”对其进行转义,因为“\u20000”表示字符“\u2000”和字符“0”,而不是代码为0x20000的字符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无法
如何从基本的多语言平面中转义字符?直接使用这些字符不是一个好主意,因为它们不能在大多数字体中显示。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
let newSpeak = '\u{1F4A9}'
newSpeak.length === 2 // "wrong"
[...newSpeak].length === 1
newSpeak === '\uD83D\uDCA9'