web-dev-qa-db-fra.com

Détection du codage de caractères d'une requête HTTP POST

Je crée 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 définirai, ou variables codées par formulaire.

L'idée est que la consommation d'applications peut POST XML directement et bénéficier d'une meilleure validation, etc., mais il y a aussi une interface HTML qui POST les trucs codés 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 simplement en regardant le POST.

Un message typique au 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

Ce 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 établit simplement les règles d'encodage%, mais ne dit rien sur le jeu de caractères dans lequel les données devraient être.

Fondamentalement, existe-t-il un moyen de dire le jeu de caractères si je ne connais pas le jeu de caractères que 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 différent de ce que je peux dire.

50
Ciaran McNulty

l'encodage par défaut d'un HTTP POST 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 auprès de

<form enctype="application/x-www-form-urlencoded;charset=UTF-8">

ou

<form accept-charset="UTF-8">

pour forcer l'encodage.

Quelques références:

http://www.htmlhelp.com/reference/html40/forms/form.html

http://www.w3schools.com/tags/tag_form.asp

62
chburd

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 le codage UTF-8, c'est le codage utilisé pour le contenu publié. Le codage d'URL est appliqué après la conversion des valeurs en l'ensemble d'octets pour le codage de caractères.

11
AnthonyWJones

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 );
1
ZeroConcept