如何更改 ajax 字符集?

Posted

技术标签:

【中文标题】如何更改 ajax 字符集?【英文标题】:How to change ajax-charset? 【发布时间】:2012-01-07 07:51:21 【问题描述】:

如何更改$.post() 使用的默认编码?

参数使用 UTF-8 编码。如何使用 ISO 8859-1 对其进行编码?

【问题讨论】:

【参考方案1】:

你可以使用:

内容类型:“应用程序/x-javascript;字符集:ISO-8859-1”

【讨论】:

您可能还需要添加beforeSend:***.com/a/14397845/92756【参考方案2】:

通过在 ajax 调用期间显式指定内容类型,如下所示,您可以覆盖默认内容类型。

$.ajax(
        data: parameters,
        type: "POST",
        url: ajax_url,
        timeout: 20000,
        contentType: "application/x-www-form-urlencoded;charset=ISO-8859-15",
        dataType: 'json',
        success: callback
);

您还必须在服务器上指定字符集。

例如:对于 php

<?php header('Content-Type: text/html; charset=ISO-8859-15'); ?>

希望对你有帮助。

【讨论】:

【参考方案3】:

似乎无法再更改字符集 – $.ajax docs 声明:

W3C XMLHttpRequest 规范规定字符集是 始终为 UTF-8;指定另一个字符集不会强制浏览器 更改编码。

【讨论】:

【参考方案4】:

请参阅 XHR 规范的第 4.5.6.4.4.3 节: https://xhr.spec.whatwg.org/#the-send()-method

如果 contentTypeRecord 不失败,contentTypeRecord 的 parameters["charset"] 存在,parameters["charset"] 不是 “UTF-8”的 ASCII 不区分大小写匹配,则:

将 contentTypeRecord 的参数 ["charset"] 设置为 "UTF-8"。

规范强制浏览器始终以 UTF-8 格式发送。

不过,您可以使用fetch API。由于它不是 XHR,因此使用 fetch 发布将遵循您的编码。

fetch(url, 
  method: 'POST',
  headers: 
    'Content-Type': `text/plain; charset=$yourCustomEncoding`
  ,
  body
).then(...

【讨论】:

以上是关于如何更改 ajax 字符集?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用ajax发送大图像或其base64字符串?

jQuery 将 ISO 字符集设置为 ajax 请求

从 Ajax 方法返回字符串结果

将 ISO-8859-1 转换为 UTF-8 [重复]

将字符串从 ajax 函数传递给 spring 控制器

如何通过 AJAX 发送“&”(和号)字符?