问题描述
我已经阅读了很多不同的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?”
它拾起那些多余?
字符,以及在“
和”
,尽管这些没有显示在控制台中的编码/解码步骤之前,
1楼
首先,代码点U+0093
和U+0094
不是弯曲的引号,它们是其他内容的控制字符...(说实话,我不知道)。
弯曲行情代码点U+201C
的“
和U+201D
为”
。
您还有另一个问题:
这几乎看起来像是解码格式不正确的示例。
正在解码字符的程序看到: C2 93
,Unicode点0093
的十六进制值。
他没有假设它是UTF-8,否则他将转换为unicode点0093
。
而是使用Windows代码第1252页。
这使得: C2
为?
, 93
进“
和94
成”
。
我只能想到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">
到您的文件。