Encoding hell! JSON ajax request (utf-8) to Latin1 uppercase characters

11,307

If the page is latin, and the server uses latin, why would you want you json to be utf-8. JSON doesn't have to be utf-8!

Try removing the utf-8 from the contentType parameter in your code above.

Share:
11,307
João Pereira
Author by

João Pereira

Updated on June 04, 2022

Comments

  • João Pereira
    João Pereira almost 2 years

    I've ran into the following problem: the javascript lib i'm working on uses JSON cross-domain requests to get data from a Ruby on Rails backend:

    function getData()
    {
        $.ajaxSetup({ 'beforeSend': function(xhr) {xhr.setRequestHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8")} })
    
        $.ajax({ 
                    url: backend_server + '?callback=parseData&op=516',
            contentType: "application/json; charset=utf-8",
            dataType: 'jsonp',
            success: function (xml) {
               //console.log('success');
            }
        });
    }
    

    The database from which RoR gets the data uses latin1 internally but, if memory serves correct, this kind of JSON requests can only be done using UTF-8.

    The webpage's header reads:

    Content-Type    text/html; charset=ISO-8859-1
    

    And the page's metatag is also ISO-8859-1:

    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
    

    Now, after getting the data from the request, my Javascript library would parse it and, eventually, append it to a certain div inside the page (using the latest JQuery, not that it matters). All the latin characters were displayed incorrectly.

    I noticed that different browsers interpreted these characters differently (for some it worked fine, for others... not so much). I ended making a slight change to a utf8_decode function i found here (detecting the user agent and skipping the processing entirely for Safari, IE and Opera) but in the end I still can't display special Latin Uppercase characters with such as "É", "Ç", "À", "Á", "Â" or "Ã".

    Any ideas? I am rather lost and could use some tips. Thanks in advance, J.

    PS: the top comment on the function's website is mine too.

    Edit1: I've also tried using unescape(encodeURIComponent(str_data)) but it didn't work either