当前位置: 首页 > 知识库问答 >
问题:

不同于java的javascript中的JSON字符编码

胡鸿羲
2023-03-14

下面的java代码

    JSONObject obj = new JSONObject();
    try{
        obj.put("alert","•é");
        byte[] test = obj.toString().getBytes("UTF-8");
        logger.info("bytes are"+ test);
    } catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (UnsupportedEncodingException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    };

生成一个JSONObject,该对象转义项目符号,但不转义带grave的拉丁文字母e,例如“\u2022é”,字节码为[123、34、97、108、101、114、116、34、58、34、92、117、50、48、50、50、-61、-87、34、125]

如何在Javascript中获得相同的精确输出(按字节顺序)?我不明白为什么JSONObject只转义一个字符,而不转义另一个字符。我不知道它遵循什么规则。

似乎在javascript中,我只能转义ASCII以外的所有内容(例如\u007f-\uffff)或根本不转义。

谢谢

共有1个答案

廖永长
2023-03-14

发生了两种不同的事情:Unicode编码和JSON字符串转义。

每2.5个JSON RFC字符串:

.. 除必须转义的字符外,所有Unicode字符都可以放在引号内。。

任何字符都可以转义。如果字符在基本多语言平面(U 0000到U FFFF)中,则它可以表示为六个字符序列...[并且BMP之外的字符被转义为UTF-16编码的代理对]

也就是说,“•é”“\u2022é”的JSON字符串是等效的。这完全取决于要转义的(附加)字符的序列化实现,这两种形式都是有效的。

当转换为字节流时,可以对这个JSON字符串(它是Unicode文本)进行编码。在示例中,它是通过UTF-8编码编码的。然后,JSON字符串可能是等效的,而不会在流级别等效字节或JSON文本级别等效字符。

就JSONObject的规则而言,它根据

    c < ' '
|| (c >= '\u0080' && c < '\u00a0')
|| (c >= '\u2000' && c < '\u2100')

可以转义这些字符的一个原因是为了确保生成的JSON也是有效的JavaScript。JSON:未讨论的JavaScript子集讨论了这个问题:问题是Unicode代码点在JavaScript字符串文本中被视为行终止符,而不是JSON。(该范围内还有其他Unicode分隔符:不妨一次捕获它们。)

 类似资料:
  • 问题内容: 我的数据库中有文本。我从xhr向我的视图发送一些文本。函数查找找不到某些Unicode字符。 我想使用以下方式找到选定的文本: 但有时变量“选择”包含如下字符: 而在变量“文本”中有: 它们只是同一事物的不同形式。在这里如何使工作更可靠? 问题答案: 这可能对您有帮助。 基本上,如果您对来自db的数据进行规范化,并且将选择规范化为相同的形式,那么使用,(即)和朋友时应该会得到更好的结果

  • 问题内容: 我有一个从Word文档中读取的字符串。我认为它采用“ Cp1252”编码。Java使用UTF8。 如何在该字符串中搜索Cp1252中的那些特殊字符并将其替换为适当的UTF8字符? 具体来说,我想将“ En Dash”字符替换为普通的“-” 以下代码块采用了来自Word文档的projDateString,并尝试执行此操作 我不确定我是否正确设置了projDateString2。如您所见,

  • 问题内容: 我想将Javascript对象编码为JSON字符串,但遇到了很多困难。 对象看起来像这样 我想将其放入JSON字符串以将其放入ajax请求中。 你明白了。不管我做什么,都行不通。所有JSON编码器(如json2等)都会产生 好吧,那对我没有帮助。基本上我想拥有类似php 函数的功能。 问题答案: 除非定义了变量,否则可能是造成您麻烦的原因。这样的事情会做你想要的: 您也可以一次完成所有

  • 问题内容: 我目前正在研究一个Java项目,该项目在编译时会发出以下警告: 我不确定SO如何在日期之前呈现该字符,但是它应该是版权符号,并在警告中以菱形问号显示。 值得注意的是,该字符正确地出现在输出工件中,但是警告令人讨厌,并且文本编辑器可能有一天会触摸包含此类的文件,而该文本编辑器会错误地保存编码… 如何将这个字符注入“版权”字符串中,以使编译器满意,并且将符号保留在文件中而没有潜在的重新编码

  • 假设我们有以下代码: 集会示威 全球抄送 4.7.2, 叮当声 3.2, 硬拷贝 13.0.1 未定义对`void foo的引用 MSVC-11.0 无法解析的外部符号" void __cdecl foo 注意第一个输出中的,第二个输出中是。 为什么?谁是对的?你能引用标准吗?

  • 问题内容: 大家好,我是从外部Api获取websocket信息的,它以这种方式给了我json响应: 我把它放在这个结构中 并用代码解码 我遇到错误 我知道该错误是文本字段值的结果。有什么好的方法可以清理它或告诉解码器忽略文本字段的内容吗? 问题答案: 该应用程序正在解析包含substring的数据。这是无效的JSON。错误消息抱怨in 。 由于JSON值包含编码的JSON值,因此应用程序必须分两个