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 :

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);
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
--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
 
ÐÏࡱá
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.

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