Détection du codage de caractères D'une requête HTTP POST
Je construis un service web et j'ai un nœud qui accepte un POST pour créer une nouvelle ressource. La ressource attend l'un des deux types de contenu - un format XML que je vais définir, ou des variables codées par formulaire.
L'idée est que les applications consommatrices peuvent publier directement du XML et bénéficier d'une meilleure validation, etc., mais il y a aussi une interface HTML qui affichera les choses codées par formulaire. Évidemment, le format XML a une déclaration de jeu de caractères, mais je ne vois pas comment je détecte le jeu de caractères du formulaire juste en regardant le poste.
Un message typique sur le formulaire de Firefox ressemble à ceci:
POST /path HTTP/1.1
Host: www.myhostname.com
User-Agent: Mozilla/5.0 [...etc...]
Accept: text/html,application/xhtml+xml, [...etc...]
Accept-Language: en-gb,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 41
field1=value1&field2=value2&field3=value3
Qui ne semble contenir aucune indication utile du jeu de caractères.
D'après ce que je peux voir, le type application / x-www-form-urlencoded est entièrement défini en HTML, qui énonce simplement les règles % - encoding, mais ne dit rien sur le jeu de caractères dans lequel les données devraient être.
Fondamentalement, est - il possible de dire le jeu de caractères si Je ne connais pas le jeu de caractères le HTML présenté à l'origine était? Sinon, je vais devoir essayer de deviner le jeu de caractères en fonction des caractères présents, et c'est toujours un peu incertain de ce que je peux dire.
3 réponses
L'encodage par défaut D'un POST HTTP est ISO-8859-1.
Sinon, vous devez regarder l'en-tête Content-Type qui ressemblera alors à
Content-Type: application/x-www-form-urlencoded ; charset=UTF-8
, Vous pouvez peut-être déclarer votre formulaire avec
<form enctype="application/x-www-form-urlencoded;charset=UTF-8">
Ou
<form accept-charset="UTF-8">
Pour forcer l'encodage.
Quelques références :
Le jeu de caractères utilisé dans le POST correspondra à celui du jeu de caractères spécifié dans le HTML hébergeant le formulaire. Par conséquent, si votre formulaire est envoyé en utilisant L'encodage UTF-8, c'est l'encodage utilisé pour le contenu posté. L'encodage D'URL est appliqué après la conversion des valeurs en un ensemble d'octets pour l'encodage des caractères.
Essayez de définir le jeu de caractères sur votre type de contenu:
httpCon.setRequestProperty( "Content-Type", "multipart/form-data; charset=UTF-8; boundary=" + boundary );