【问题标题】:Why does parsing these code points result in multiple characters [duplicate]为什么解析这些代码点会导致多个字符[重复]
【发布时间】:2019-02-01 21:49:39
【问题描述】:

当我解析这个时:

JSON.parse('"\\u1f469\\u200d\\u1f469\\u200d\\u1f466"')

我最终得到了多个字符:

὆9‍὆9‍὆6

但是当我解析这个时:

JSON.parse('"\\uD83D\\uDC69\\u200D\\u2764\\uFE0F\\u200D\\uD83D\\uDC69"')

它会产生 ????‍❤️‍??????。两者都在 chrome 上运行。第一个是有效的零宽度连接表情符号。为什么第一个不产生组合的表情符号字符?

【问题讨论】:

  • 这是 JavaScript 中的一个已知限制,它不支持超过 2 个字节的多字节字符:这些字符需要使用代理对进行编码。
  • 如果是Javascript的限制,这个网页怎么能正确显示字符:emojipedia.org/family-woman-woman-boy
  • 你在哪里看到那个网站是通过 JS 做的?我所看到的只是 HTML 文档是 UTF 编码的,并且在没有任何 JS 参与的情况下,文档中的字符是硬编码的。该页面上较大的图像不是字符,而是图像。
  • 注意:您的问题与JSON.parse 关系不大,因为JSON.parse('"\\uD83D\\uDC69"')"\uD83D\uDC69" 是同一个字符串。

标签: javascript json parsing


【解决方案1】:

表情符号是由“U”后面的 4 个字符创建的。在您询问的示例中,您有 5 个字符,因此表情符号是从前 4 个 (1f46) 创建的,第 5 个 (9,9,6) 被视为普通字符。

JSON.parse('"\\u1f469"') // => \\u1f46 = ὆, 9 = 9

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-18
    • 2010-12-09
    • 2019-09-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多