IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Connaitre le jeu de caractères d'une String ?


Sujet :

Langage Java

  1. #1
    Membre du Club
    Inscrit en
    Juillet 2004
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 57
    Points : 46
    Points
    46
    Par défaut Connaitre le jeu de caractères d'une String ?
    Bonjour,

    Mon application (servlet) lit des paramètres rajoutés par un middleware dans l'entête HTTP de la request envoyée au serveur par la méthode suivante :

    public java.lang.String getHeader(java.lang.String name) appartenant à javax.servlet.http.HttpServletRequest

    Mais à mon grand désespoir, suivant les configurations, ces chaînes sont encodées soit en UTF-8 soit en ISO-8859-1 ...

    Existe-t-il un moyen de savoir en quel jeu de caractères une chaine est codée, afin de la réencoder si nécessaire ?

    Merci d'avance à tous.

  2. #2
    Membre éclairé Avatar de g_rare
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 608
    Points : 683
    Points
    683
    " Jag blev dömd för fildelning och allt jag fick var en sketen t-shirt. " (tankafritt.nu)
    PAS DE REPONSE PAR MESSAGE PRIVE ! Penser au bouton Résolu en bas de la discussion...

  3. #3
    Membre du Club
    Inscrit en
    Juillet 2004
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 57
    Points : 46
    Points
    46
    Par défaut
    Merci, je n'avais effectivement pas vu cette méthode.

    Mais d'après la doc :
    "Returns the name of the character encoding used in the body of this request. This method returns null if the request does not specify a character encoding".

    Ce dont j'ai besoin, c'est du jeu de caractères du header HTTP (et non du body), et même plus précisément d'une variable particulière, car à la limite, différents middlewares peuvent écrire leurs variables dans des jeux de caractères différents.

    J'ai quand même essayé, la méthode renvoie null dans les 2 cas.

    D'autres idées ?

    Merci d'avance à tous ...

  4. #4
    Membre régulier Avatar de et.rond.et.rond
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 110
    Points : 119
    Points
    119
    Par défaut
    Citation Envoyé par dedz
    Ce dont j'ai besoin, c'est du jeu de caractères du header HTTP (et non du body),
    je crois que le header ne doit pas utiliser autre chose que de l'ascii 127 donc il n'y a pas besoin d'encodage
    est ce que tu aurais un exemple ?
    ... petit patapon

  5. #5
    Membre du Club
    Inscrit en
    Juillet 2004
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 57
    Points : 46
    Points
    46
    Par défaut
    Le problème vient évidemment de ces satanés caractères accentués. Le middleware en question place dans des variables situées dans le header HTTP des infos sur les utilisateurs : nom, prénom ...

    Deux versons de ce middleware cohabitent :
    - une qui code les infos en UTF-8,
    - l'autre en ISO-8859-1 (ISoLatin).

    Si je récupère la valeur avec :
    String valeur = request.getHeader(param);
    la version ISO-8859-1 fonctionne mais pas la version UTF-8. Il y a un encodage de la String en ISO-8859-1 par défaut.

    Pour que cela fonctionne avec la version UTF-8, il faut :
    String valeur = new String(request.getHeader(param).getBytes(), "UTF-8");
    Mais cela ne fonctionne pas avec la version ISO-8859-1.

    J'ai tout dit ...

  6. #6
    Membre régulier Avatar de et.rond.et.rond
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 110
    Points : 119
    Points
    119
    Par défaut
    et ces 2 tabernacles de clients n'envoyent pas de données spéciales qui permetterait de les identifier ?
    si la réponse est non, il en te reste plus qu'à plonger dans la théorie des encodage et ensuite tu pourras parcourir chaque caractère et savoir quel client t'a envoyé ça
    ... petit patapon

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    en fait il n'y a pas de réelle solution, le header ne sont pas censé en effet contenir autre chose que du ASCII. Si c'est le cas, il faut que le serveur renvoie également une donnée indiquant l'encodage utilisé

  8. #8
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par dedz
    Pour que cela fonctionne avec la version UTF-8, il faut :
    String valeur = new String(request.getHeader(param).getBytes(), "UTF-8");
    Mais cela ne fonctionne pas avec la version ISO-8859-1.
    Il faudrait plutôt faire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String valeur = new String(request.getHeader(param).getBytes("UTF-8"), "UTF-8");
    a++

Discussions similaires

  1. Comment changer le jeu de caractères d'une base ?
    Par Mister Paul dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 02/03/2007, 04h19
  2. Changer le jeu de caractères d'une base entière
    Par renaud26 dans le forum Outils
    Réponses: 10
    Dernier message: 08/02/2007, 09h31
  3. [deb]Accéder aux caractères d'une string
    Par Raideman dans le forum C++
    Réponses: 4
    Dernier message: 22/08/2006, 15h28
  4. Réponses: 7
    Dernier message: 29/05/2006, 14h46
  5. Réponses: 6
    Dernier message: 24/07/2003, 12h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo