javascript - JSON 负载问题,javascript 编码

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

我读过一堆不同的 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+0093U+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/

相关文章:

c - 将非 ASCII 字符分配给宽字符并使用 printf 打印

Selenium-wire 响应对象 - 将响应主体作为字符串而不是字节获取的方法

c# - 将 "& aring;" "& ouml;"转换为其正常表示

javascript - 如何在不请求外部页面的情况下重用 Angular-JS 常见标记(例如小部件)?

javascript - 使用 Onsen UI,如何使用 Fade 在页面之间转换?

javascript - Highcharts 标记仅出现在 x 轴刻度上

javascript - Webgl Sprite 渲染,alpha 混合白边

python - 什么命令 print unicode 在 python 中转义

c++ - 为 ISO 8859-1 实现 basic_string<unsigned char>

php - 将 utf8 字符转换为 iso-88591 并返回 PHP