【问题标题】:JSON payload problems, javascript encodingJSON有效负载问题,javascript编码
【发布时间】:2015-08-07 22:51:16
【问题描述】:

我已经阅读了一堆不同的 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”

它在哪里提取了那些额外的Â 字符以及,尽管这些字符在编码/解码步骤之前没有显示在控制台中

【问题讨论】:

  • 您在 HTML 中打印 “title” 是吗?
  • 基本上是的,或者如果我将它打印到调试控制台,它也会像那样出来
  • 您是否将字符集设置为 utf8? <meta charset="utf-8">
  • 没用,我在页面加载和渲染后注入脚本
  • U+0093U+0094 是不可打印的字符。你确定你不是指弯引号?

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


【解决方案1】:

首先,代码点U+0093U+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">

到您的文档。

【讨论】:

  • 感谢您的长篇回复。我更新了我的问题,以更好地反映我的问题的性质,并希望更好地了解正在发生的事情 - 因为我有这个问题,甚至没有在任何 HTML 元素中插入任何东西
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-27
  • 2017-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多