jQuery.parseJSON无法解析\u0092字符。

3

我有一个使用php和ajax函数编码的文本,使用php utf8_encode进行编码。如果我直接在控制台中打印它,文本显示如下:

"projects":[
    {
        "id": "1",
        "title": "CURSOS DE PERIODISME",
        "description": "Els cursos tenen l\u0092objectiu d\u0092aprofundir en l\u0092actitud period\u00edstica dels alumnes."
    }
]

当我使用jquery.parseJSON并将文本再次打印到描述中时,文本被解析如下:
Els cursos tenen lobjectiu daprofundir en lactitud periodística dels alumnes.
所有其他Unicode字符都被很好地解析,但为什么\u0092没有被解析?我做错了什么吗?
提前感谢!

你的原始字符串是什么?尝试移除utf8_encode了吗? - OptimusCrime
只是一句话:FF14的JSON.parse可以正确解析包括\u0092在内的字符串。 - Sirko
1
如果我删除 utf8_encode,json_encode 将返回 null。 - Sergi Mínguez
2个回答

2

U+0092 是控制字符,可能是因为你的字符串使用方法导致它被解析了但不可见。

例如,下面的代码并没有进行JSON解析:

(function() {

  var strWith = "Els cursos tenen l\u0092objectiu d\u0092aprofundir";
  var strWithout = "Els cursos tenen lobjectiu daprofundir";

  display("With    (" + strWith.length + "): " + strWith);
  display("Without (" + strWithout.length + "): " + strWithout);

  function display(msg) {
    var p = document.createElement('pre');
    p.innerHTML = String(msg);
    document.body.appendChild(p);
  }
})();

现场演示 | 源代码

输出结果:

With (40): 课程的目标是深入学习
Without (38): 课程的目标是深入学习

如您所见,它们带或不带控制字符看起来都相同,但从长度可以看出控制字符包含在字符串中的。


谢谢您的回答,我该怎么做才能显示它呢?我想看到: Els cursos tenen l'objectiu d'aprofundir - Sergi Mínguez
2
@SergiMínguez: str = str.replace(/\u0092/g, "'") 应该可以解决问题:实时示例 | 源代码 - T.J. Crowder

0

它由jQuery解析。一个简单的测试可以向你展示:

> $.parseJSON('"\\u0092"').length 
1
> $.parseJSON('"\\u0092"').charCodeAt(0)
146
> $.parseJSON('"\\u0092"').charCodeAt(0).toString(16)
"92"

它只是不会被显示出来,关于这个问题请参考@TJCrowders的回答。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接