Erreur d'encodage

a marqué ce sujet comme résolu.

Saut à tous,

je suis confronté à une erreur dès que je fait une requête POST qui contient des accents.

Voici l'erreur :

1
'latin-1' codec can't encode character '\ufffd' in position 2: ordinal not in range(256)

Je ne comprend pas, j'utilise pourtant Python 3, qui, il me semble, utilise l'utf-8 par défaut. Pourquoi il me parle de 'latin-1' ?

Voici ma vue qui génère l'erreur :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
def api_teacher_change(request):
    if request.is_ajax() and request.method == 'POST':
        encoding = request.encoding
        data = json.loads(request.read().decode(encoding))
        # data = json.loads(request.body.decode('latin-1'), encoding="utf-8")
        teacher = Teacher.objects.filter(id=data['id'])
        if (len(teacher) > 0):
            print(data['last_name'])
            teacher.update(username=data['username'], first_name=data['first_name'], last_name=data['last_name'],
                           password=data['password'])
            return HttpResponse("Ok")
        else:
            return HttpResponse("None")
    return HttpResponse("Forbidden")

et voici ma requête en Ajax (jquery) :

1
2
3
4
5
6
7
$.ajax({
                url : 'api/teacher/change',
                type : 'POST',
                data : JSON.stringify({'id': id,'username': username, 'first_name': first_name, 'last_name': last_name, 'password':password}),
                contentType: "application/json; charset=utf-8",
                dataType: "json"
            });

Pourquoi j'ai cette erreur ? et comment la résoudre ?

Je vous remercie par avance ;)

L'erreur est à la ligne 8 du code python.

request.read() vaut "Le corps HTTP brut de la requête sous forme de chaine binaire", il est équivalent à request.body (il me semble).

request.encoding vaut la chaine utf-8.

P.S : Ouups, j'ai oublié de te remercier pour le fait que tu essayes de m'aider !

+0 -0

Oui exactement la même car ma variable encoding contient déjà "utf-8".

Je tient aussi à signalé que je n'ai pas d'erreur l'ors de l'enregistrement de mes data en base de données.L'erreur viendrait donc du print.

P.S: Je viens de m'apercevoir que tous les fichiers *.py des mon projet sont au format windows-1252, l'erreur viens peut être de là, mais je vais réfléchir avant de ré-encoder tous mes fichiers Python, j'ai pas envie de tout péter …

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte