user897237
user897237

Reputation: 621

How to change ajax-charset?

How can I change the default encoding used by $.post()?

The arguments are encoded with UTF-8. How can I encode it with ISO 8859-1?

Upvotes: 17

Views: 50391

Answers (4)

Roy Art
Roy Art

Reputation: 703

See section 4.5.6.4.4.3 of the XHR spec: https://xhr.spec.whatwg.org/#the-send()-method

If contentTypeRecord is not failure, contentTypeRecord’s parameters["charset"] exists, and parameters["charset"] is not an ASCII case-insensitive match for "UTF-8", then:

Set contentTypeRecord’s parameters["charset"] to "UTF-8".

The spec forces browsers to always send as UTF-8.

You may however, use the fetch API. Since it's not an XHR, posting using fetch will honour your encoding.

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

Upvotes: 0

Jan Molnár
Jan Molnár

Reputation: 420

It seems the charset cannot be changed anymore – $.ajax docs states:

The W3C XMLHttpRequest specification dictates that the charset is always UTF-8; specifying another charset will not force the browser to change the encoding.

Upvotes: 3

gowtham kumar
gowtham kumar

Reputation: 227

By giving the content type explicitly during ajax call as below may allow you to override the default content type.

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

You would also have to specify the charset on the server.

Ex: for php

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

I hope this may help you.

Upvotes: 6

Sudhir Bastakoti
Sudhir Bastakoti

Reputation: 100205

You could use:

contentType:"application/x-javascript; charset:ISO-8859-1"

Upvotes: 10

Related Questions