我已经阅读了一堆不同的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”
虽然在编码/解码步骤之前没有出现在控制台中,但是它已经获取了额外的Â
个字符以及“
和”
答案 0 :(得分:1)
首先,代码点U+0093
和U+0094
不是弯曲的引号,它们是其他东西的控制字符......(说实话,我不知道)。曲线引号代码点U+201C
为“
,U+201D
为”
。你还有另外一个问题:
这看起来像是不正确的解码格式的一个例子。正在解码字符的程序:C2 93
,unicode点0093
的十六进制值。他不是假设它是UTF-8,或者他会对unicode点0093
进行翻译。相反,它使用Windows Code Page-1252。这使C2
成为Â
,93
成“
而94
成”
。
我只能想到为什么会这样做的两个原因,但它们都涉及到您的浏览器。 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">
到您的文件。