Bonjour,
Pour des besoins bien spécifiques, j'ai étendu une petite librairie qui me permettait de faire des envois Ajax simple pour envoyer des formulaires au format multipart (c'est à dire texte + fichier).
Voilà comment je procède pour envoyer le message :
La variable data ressemble à ça une fois remplie :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 // Génère une string aléatoire pour séparer les données var boundary = this.generateBoundary(); // Le contentType est forcément binaire var contentType = "multipart/form-data; boundary=" + boundary; this.req.setRequestHeader("Content-Type", contentType); // On construit le message var data = this.buildBinaryMessage(this.elements, boundary); // On envoie les données this.req.sendAsBinary(data);
Le problème que je rencontre c'est que les données texte sont alors encodées avec l'unicode code point et non en code hexa utf-8.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 --AJAX-----------------------1268238263455 Content-Disposition: form-data; name="utilisateurComment" Content-Type: text/plain; charset=UTF-8 éaza --AJAX-----------------------1268238263455 Content-Disposition: form-data; name="fichier"; filename="fichier.xls" Content-Type: application/octet-stream ÐÏࡱá
Par exemple le caractère "é" est transmis sur uniquement 4 bit, et correspond au code hexa "E9".
Lorsque j'envoie les données de manière classique, c'est à dire au format x-www-url-encoded, via la méthode send de l'objet XMLHttpRequest, le caractère "é" est bien encodé sur 8 bit, avec comme code hexa "C3 A9".
Je suis entrain de chercher le pourquoi de cette différence et me demande si la méthode send ne transcris pas en interne les caractères spécifiques...
J'aimerais donc savoir si certains d'entre vous on déjà rencontrer ce problème et comment vous y avez éventuellement remédier...
Merci d'avance pour votre aide![]()
Partager