【问题标题】:XHR request garbles encoding in Chrome, works fine in SafariXHR 请求在 Chrome 中编码乱码,在 Safari 中运行良好
【发布时间】:2013-06-10 10:10:31
【问题描述】:

以下代码在 Chrome 中发布“it’s”,但在 Safari 中发布“it’s”。

invocation = new XMLHttpRequest()
invocation.open('POST', 'https://example.herokuapp.com/content/24/nl/123')
invocation.setRequestHeader('Content-Type', 'text/plain; charset=UTF-8');
invocation.send('{"data":"it’s"}')

如何说服 Chrome 使用 UTF-8 发布?

【问题讨论】:

  • 源文件是utf-8编码的吗?
  • 网站标题中有<meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
  • 我通过使用解决方法解决了这个问题:invocation.send('{"data":encodeURIComponent("it’s")}')

标签: javascript google-chrome encoding


【解决方案1】:

确保设置响应头

Content-Type: text/html; charset=UTF-8

也在https://example.herokuapp.com/content/24/nl/123 目标页面上,而不仅仅是在网站上(请求页面)。还要检查任何数据源(包括目标本身)的编码是否为 UTF-8。

据我测试,乱码仅来自路径上的字符集不兼容

client encoding- client request- server encoding- server data- server response

注意:如果您的网络服务器在 PHP 上运行,您可以使用 header 作为响应标头。如果由于某种原因无法设置标头,请使用 iconv 将响应从您的字符集转换为 UTF-8。

【讨论】:

  • 这不是问题 - 发送到服务器的 http 请求已经破坏了字符。这就是使用哪种浏览器很重要的原因。
  • @MichieldeMare 源文件也必须以 UTF-8 存储,因为您将 invocation.send('{"data":"it’s"}') ' 字符硬编码到请求中(元标头不够) .您确定我在答案中描述的路径的每个部分的编码都匹配吗?它在我的 Chrome 上运行良好。
  • 我从 Chrome 控制台运行 Javascript。我不确定源页面的编码是如何发挥作用的。
  • 如果 字符被硬编码到页面中,它使用源文件字符集。如果它与响应标头字符集不匹配,则为乱码。如果您从控制台运行它,则取决于使用哪个字符集的浏览器:Chrome 似乎更喜欢默认操作系统字符集,而 Safari 使用源文件字符集。
  • OSX 10.8的默认字符集不是UTF-8?
猜你喜欢
  • 2018-09-25
  • 2014-12-25
  • 2017-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-23
  • 1970-01-01
  • 2021-03-10
相关资源
最近更新 更多