Запросы, отправленные с Android телефонов, вызывают ошибку декодирования - PullRequest
0 голосов
/ 20 июня 2020

У меня проблема в том, что запросы POST, отправленные с некоторых Android телефонов, вызывают в TastyP ie следующую ошибку декодирования.

DjangoUnicodeDecodeError: 'utf8' codec can't decode byte 0xfc in position 10: invalid start byte. You passed in '{"text":"Z\xfcrich"}' (<type 'str'>)

Сообщение об ошибке указывает, что умляут в "Zürich" был закодирован с помощью iso-8859-1 вместо utf-8. Браузер отправляет тело latin-1 в кодировке JSON в конечную точку TastyP ie, которая затем пытается декодировать тело с помощью utf-8 по умолчанию.

Странно то, что это происходит только в том случае, если POST запрос был отправлен из браузера Android или Nokia, установленного на некоторых телефонах Samsung, Huawei и Nokia Android. Запросы, отправленные с телефонов Apple, Firefox для Android, Chrome для Android и настольных браузеров, работают нормально.

# Some devices that won't work
Dalvik/2.1.0 (Linux; U; Android 8.0.0; SM-G930F Build/R16NW)
# Android Browser on Android  (Samsung SM-G930F)
Dalvik/2.1.0 (Linux; U; Android 9; TA-1004 Build/PPR1.180610.011)
# Android Browser on Android Pie
Dalvik/2.1.0 (Linux; U; Android 10; Nokia 9 Build/QKQ1.190828.002)
# Nokia Browser on Android 10 (Nokia 9)
Dalvik/2.1.0 (Linux; U; Android 9; LM-G810 Build/PKQ1.190302.001)
# Android Browser on Android Pie (LG G810)

Как можно получить приведенный ниже код?

# HTML5 Meta Tag
<meta charset="utf-8">

# JavaScript Request
$.getJSON( "/api/v1/endpoint1/", function( data ) {
    var text = data.objects[0].text;

    $.ajax({
        url: "/api/v1/endpoint2/",
        type: "POST",
        dataType : "json",
        contentType: "application/json; charset=utf-8",
        data: JSON.stringify({"text": text}),
        cache: false,
    });
});
...