我读过一堆不同的 StackOverflow 答案和类似的问题,但没有一个有任何帮助。
我正在使用 Javascript 发出 ajax 请求以获取 json 形式的一些数据。
我正在接收如下所示的 json 数据:
\u0093标题\u0094
现在我相信 json 默认情况下以 utf-8 传递,但是这些字符 \u0093
和 \u0094
我相信是 latin1 控制字符,用于表示打开和关闭语音标记。
问题是当我使用 Javascript 进行 GET 时,响应最终会类似于:
“标题”
我尝试过 encodeURIComponent( data.body ))
并且它产生了相同的结果
这非常烦人,以前有其他人遇到过这些问题吗?
编辑:
想象一下以下原始 JSON 数据,这就是我要检索的内容:
\u0093标题\u0094
例如,我运行以下 jQuery/Javascript 片段来获取上述 JSON 数据
$.ajax({
type: "GET",
url: "myurl",
success: function(data){
console.log(data.body);
}
});
以下内容打印到控制台(看起来不错,只是省略了控制字符):
标题
然后我对其进行编码和解码,这应该会抵消并且不会改变任何内容:
console.log(decodeURIComponent(encodeURIComponent( data.body )))
除了这最终会打印以下内容:
“标题”
它在哪里拾取了那些额外的 Â
字符以及 “
和 ”
,尽管这些字符之前没有显示在控制台中编码/解码步骤
最佳答案
首先,代码点U+0093
和U+0094
不是弯曲的引号,它们是其他东西的控制字符......(说实话,我不知道)。曲线引号代码点是 U+201C
对于 “
和U+201D
对于 ”
。您还有另一个问题:
这看起来很像一个解码格式不正确的例子。正在解码字符的程序看到:C2 93
,unicode点的十六进制值0093
。他不会假设它是 UTF-8,否则他会翻译为 unicode 点 0093
。相反,它使用 Windows 代码页 1252。这使得:C2
进入Â
, 93
进入“
和94
进入”
.
我只能想到这样做的两个原因,但它们都涉及您的浏览器。 Javascript 不使用 UTF-8 并不是真正的问题,因为这有效:
document.getElementById('result').innerHTML = '\u201CHello\u201D';
<pre id="result"></pre>
问题可能是 HTTP 响应,您的浏览器正在将 HTTP 响应读取为 Windows Code Page-1252。另一件事可能是因为您的浏览器错误地显示了数据(现在我想起来,这没有多大意义)。
尝试通过发送以下 HTTP header 来设置 HTTP 响应的内容类型:
Content-Type: application/json; charset=utf-8
我坚持要求你输入:
<meta charset="utf-8">
到您的文档。
关于javascript - JSON 负载问题,javascript 编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31887726/