【问题标题】:Failed to declare and display UTF-8 character properly in JSON无法在 JSON 中正确声明和显示 UTF-8 字符
【发布时间】:2020-05-15 04:23:30
【问题描述】:

我有一个 JSON 对象,其中一个属性包含一个静态特殊字符 - https://www.compart.com/en/unicode/U+1F514

我尝试将字符串都存储为编码的 UTF-8 "\xF0\x9F\x94\x94" 或尝试使用其十六进制值 - String.fromCharCode(0x1F514) 或十进制值 String.fromCharCode(128276) 打印它 但这一切都会导致 Google Chrome 中出现空字符/空方字符。

我怎样才能将这个字符正确地存储在一个简单的 JSON {header1:"____"} 中,然后回显它?

也无法在 IntelliJ 中显示 - 因此,如果您对此问题有评论,将非常感谢。

【问题讨论】:

    标签: javascript html json utf-8


    【解决方案1】:

    我认为问题在于字体不支持此类符号,因此绘制了方形字符。如果您使用此字符没有特定原因,您可以使用图标绘制它,或使用图标字体中的字符。

    【讨论】:

    • 出于某种原因我没有想到...需要参考支持这种字符的字体。
    【解决方案2】:

    由于历史原因,JavaScript 没有完整的 Unicode 支持,因为语言创建者假设 UTF-16 永远不需要超过 2 个字节来编码单个字符。 JSON 继承了这一点,\u 实体只接受 4 个十六进制字符。

    您需要使用一种解决方法,基本上是将实际的 4 字节 UTF-16 字符拆分为两个 2 字节字符,如下所示:

    var raw = "?";
    var doesNotWork = "\u1F514";
    var works = "\uD83D\uDD14";
    console.log(raw, doesNotWork, works);

    ... 或者去掉实体,只转储实际的二进制字符:

    var data = ["?"];
    var json = JSON.stringify(data);
    console.log(json, JSON.parse(json));

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-09
      • 2018-04-24
      • 1970-01-01
      • 2013-04-12
      • 2020-04-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多