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.

47
demandé sur bignose 2009-04-02 13:08:22

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 :

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

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

58
répondu chburd 2009-04-02 11:56:16

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.

11
répondu AnthonyWJones 2009-04-02 09:16:15

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
répondu ZeroConcept 2012-02-28 00:41:47