Les en-têtes HTTP de codage/décodage en Java

Un en-tête HTTP personnalisé est passé à une Servlet application à des fins d'authentification. La valeur d'en-tête doit être en mesure de contenir les accents et autres caractères non-ASCII, ce doit être dans un certain encodage (idéalement UTF-8).

Je suis fournies avec ce morceau de code Java par les développeurs qui contrôle l'authentification de l'environnement:

String firstName = request.getHeader("my-custom-header"); 
String decodedFirstName = new String(firstName.getBytes(),"UTF-8");

Mais ce code n'est pas bon pour moi: elle suppose le codage de la valeur d'en-tête, quand il me semblait qu'il y avait une bonne façon de spécifier un encodage pour les valeurs d'en-tête (du MIME, je crois).

Voici ma question: quelle est la bonne façon (tm) de traiter avec en-tête personnalisé valeurs qui ont besoin de l'appui d'un encodage UTF-8:

  • sur le fil (la façon dont la tête ressemble sur le fil)
  • du décodage point de vue (comment le décoder à l'aide de Java Servlet API, et peut-on supposer que la demande.getHeader() déjà bien fait le décodage)

Ici est un environnement indépendant de l'exemple de code pour traiter les en-têtes comme de l'UTF-8 dans le cas où vous ne pouvez pas changer votre service:

String valueAsISO = request.getHeader("my-custom-header"); 
String valueAsUTF8 = new String(firstName.getBytes("ISO8859-1"),"UTF-8");

OriginalL'auteur ebruchez | 2008-11-27