JSON有效负载问题,javascript编码

时间:2015-08-07 22:51:17

标签: javascript utf-8 iso-8859-1 latin1

我已经阅读了一堆不同的StackOverflow答案和类似的问题,但没有一个有任何帮助。

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

我正在接收json数据,如下所示:

\u0093title\u0094

现在我相信json默认以utf-8发送,但是我相信这些字符\u0093\u0094是latin1控制字符,用于表示开放和结束语音标记。

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

“title”

我尝试过encodeURIComponent( data.body ))并产生相同的结果

这非常烦人,以前有其他人遇到过这些问题吗?

编辑:

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

\u0093title\u0094

例如,我运行以下jQuery / Javascript来获取上述JSON数据

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

以下内容将打印到控制台(除了省略控制字符外,看起来很好):

title

然后我对它进行编码和解码,它应该取消并且不做任何改变:

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

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

“title”

虽然在编码/解码步骤之前没有出现在控制台中,但是它已经获取了额外的Â个字符以及

1 个答案:

答案 0 :(得分:1)

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

这看起来像是不正确的解码格式的一个例子。正在解码字符的程序:C2 93,unicode点0093的十六进制值。他不是假设它是UTF-8,或者他会对unicode点0093进行翻译。相反,它使用Windows Code Page-1252。这使C2成为Â9394

我只能想到为什么会这样做的两个原因,但它们都涉及到您的浏览器。 Javascript不使用UTF-8确实不是问题,因为这有效:

document.getElementById('result').innerHTML = '\u201CHello\u201D';
<pre id="result"></pre>

问题可能是HTTP响应,您的浏览器正在读取HTTP响应作为Windows Code Page-1252。另一件事可能是因为你的浏览器错误地呈现数据(现在我想到它,没有多大意义)。

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

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

我坚持你把:

<meta charset="utf-8">

到您的文件。