当前位置: 代码迷 >> JavaScript >> JSON有效载荷问题,JavaScript编码
  详细解决方案

JSON有效载荷问题,JavaScript编码

热度:34   发布时间:2023-06-07 15:30:33.0

我已经阅读了很多不同的StackOverflow答案和类似的问题,但是它们都没有任何帮助。

我正在使用Javascript发出ajax请求以json形式获取一些数据。

我正在接收如下的json数据:

\?title\?

现在,我相信默认情况下json是在utf-8中提供的,但是我相信这些字符\?\?是latin1控制字符,用于表示打开和关闭的语音标记。

问题是当我使用Javascript进行GET时,响应最终如下:

?“title?”

我尝试做encodeURIComponent( data.body )) ,它产生相同的结果

这是非常烦人的,其他任何人以前都遇到过这些问题吗?

编辑:

想象以下原始JSON数据,这就是我要检索的内容:

\?title\?

因此,例如,我运行以下jQuery / Javascript片段以获取上述JSON数据

                $.ajax({
                  type: "GET",
                  url: "myurl",
                  success: function(data){
                     console.log(data.body);
                  }
                });

将以下内容打印到控制台上(看起来不错,但省略了控制字符):

title

然后,我对其进行编码和解码,这应该抵消并保持不变:

console.log(decodeURIComponent(encodeURIComponent( data.body )))

除此之外,最终将打印以下内容:

?“title?”

它拾起那些多余?字符,以及在 ,尽管这些没有显示在控制台中的编码/解码步骤之前,

首先,代码点U+0093U+0094不是弯曲的引号,它们是其他内容的控制字符...(说实话,我不知道)。 弯曲行情代码点U+201CU+201D 您还有另一个问题:

这几乎看起来像是解码格式不正确的示例。 正在解码字符的程序看到: C2 93 ,Unicode点0093的十六进制值。 他没有假设它是UTF-8,否则他将转换为unicode点0093 而是使用Windows代码第1252页。 这使得: C2?9394

我只能想到2个原因,但它们都涉及到您的浏览器。 不使用UTF-8的Javascript并不是真正的问题,因为这可以工作:

 document.getElementById('result').innerHTML = '\“Hello\”'; 
 <pre id="result"></pre> 

问题可能出在HTTP响应上,您的浏览器正在将HTTP响应读取为Windows代码第1252页。 另一件事可能是因为您的浏览器显示的数据不正确(我现在认为它没有太大意义)。

尝试通过发送以下HTTP标头来设置HTTP响应的Content-Type:

Content-Type: application/json; charset=utf-8

我坚持要求您输入:

<meta charset="utf-8">

到您的文件。