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

ASP Discussion :

Comment encoder correctement les caractères accentués, les caractères spéciaux


Sujet :

ASP

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    112
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 112
    Points : 112
    Points
    112
    Par défaut Comment encoder correctement les caractères accentués, les caractères spéciaux
    Salut,

    J'ai beau le tourner dans tous les sens, je ne trouve pas de solution.

    Donc, lorsque je passe un caractère accentué dans un Mid() ou même Len(), le caractère en question est invariablement transformé en... quelque chose de pas beau du tout.

    Ce serait un problème de configuration de IIS ou de mon poste de travail ?

    ++

  2. #2
    Modérateur
    Avatar de roro06
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    1 480
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 480
    Points : 1 978
    Points
    1 978
    Par défaut
    Bonjour

    ça doit venir de chez toi, parceque je n'ai encore jamais rencontré ça. Pour le Mid, encore... Mais pour le Len, qui renvoie en entier, dur à comprendre.

    Quant à savoir d'où ça vient ... Un ptit bout d'code, peut-être ?

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    112
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 112
    Points : 112
    Points
    112
    Par défaut
    Salut,

    Oui non, Len, effectivement... Je suis allé un peu vite, il s'agit en fait de LCase.

    Essaye ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Dim sAccent : sAccent = "àâäéèêëìîïöôùüûçÀÂÄÉÈÊËÌÎÏÖÔÙÜÛÇ"
    response.write LCase(sAccent)
    Chez moi ça fait des "machins"...

    En même temps, j'ai toute mon appli en UTF-8. Pour peu que LCase transforme en ASCII et boom...

    ++

  4. #4
    Modérateur
    Avatar de roro06
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    1 480
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 480
    Points : 1 978
    Points
    1 978
    Par défaut
    Re

    Chez moi, ça retourne bien :
    àâäéèêëìîïöôùüûçàâäéèêëìîïöôùüûç

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    112
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 112
    Points : 112
    Points
    112
    Par défaut
    Ca doit être ça alors, le coup de l'UTF-8..

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    112
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 112
    Points : 112
    Points
    112
    Par défaut
    C'est dingue cette historie, le Ucase ne transforme pas les caractères... Par contre il me retourne des caractères lisibles...

    Alors là, je coince.

  7. #7
    vva
    vva est déconnecté
    Membre averti Avatar de vva
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    463
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2004
    Messages : 463
    Points : 447
    Points
    447
    Par défaut
    essaye de mettre ceci en toute première ligne de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Response.Charset = "iso-8859-1"'Encodage pour l'interprétation des caractères accentués et spéciaux

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    112
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 112
    Points : 112
    Points
    112
    Par défaut
    Je travail en UTF-8 pour justement être compatible avec tous les caractères spéciaux de toutes les langues vva... Je ne souhaite donc pas utiliser d'autres normes d'encodage.

    Je vais trouver...

    Edite : si je manipule un "î" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    '-- par exemple 
    if InStr("î","î") then
       response.write "î"
    end if
    Ca marche nickel. Non seulement il le compare correctement mais il l'affiche aussi correctement.
    Par contre, dès que je le passe dans un Mid() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    '-- ma chaine de comparaison, elle doit me servir à supprimer les caractères spéciaux des chaines envoyées par le client
     
    Dim sAccent : sAccent = "àâäéèêëìîïöôùüûçÀÂÄÉÈÊËÌÎÏÖÔÙÜÛÇ"
     
    response.write Mid(sAccent,1,1)
    Là boom, il me retourne un losange noir avec un "?" blanc à l'intérieur...

    Et je ne trouve sur internet à ce sujet, de quoi devenir chèvre.

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    112
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 112
    Points : 112
    Points
    112
    Par défaut
    Bon rien à faire, je parts donc du principe que le caractère codé en UTF-8 et passé dans certaines fonction de traitement de "string" de M$ ne sont pas compatible tout simplement.

    Bilan je me suis fait une fonction qui me retourne un tableau comprenant la liste des caractère spéciaux, une autre recevant un caractère spécial et le convertissant dans son équivalent US et voilà.

    En suite, je boucle sur mon tableau, si tu je trouve une caractère spécial, je replace et voilà.

    ++

  10. #10
    Expert éminent
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Points : 9 512
    Points
    9 512
    Par défaut
    Yo,

    Il faut être certain de spécifier l'encodage du début jusqu'à la fin. Le problème est difficile à cerner, cela va de la saisie (en fonction du navigateur) à la restitution en passant par le stockage des données et la façon dont tu sauvegardes le fichier. Dernièrement, je me suis inscrit sur un site US juste pour récupérer un soft. J'ai mis un nom d'utilisateur à la c**. Dans le mail d'activation j'ai récupéré des caractères caractéristiques d'un pb d'encodage. Impossible de me reloguer.

    Dans notre boite on a des sites en FR, GB, DE, DU, SE, IT. Ca passe sans encodage UTF-8 avec juste un en-tête latin et de l'HTMLEncode.

    En .Net il y a l'objet Culture. Peut-être qu'il s'agit d'une classe contenant les correspondances et forçant la réponse (objet Response).

    Ce serait cool d'arriver à faire un tuto explicite là dessus un de ces jours. Il y a beaucoup d'implications notement les dates, les nombres.

    A+

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    112
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 112
    Points : 112
    Points
    112
    Par défaut
    Salut,

    Je viens d'avoir des infos très intéressantes à ce sujet et allant tout a fait dans ton sens.
    Du coup je vais tout vérifier et mettre ça au carré, j'ai ce genre de problème depuis que je suis en UTF-8, je dois comprendre.

    Si je trouve le temps et je sais où je vais je proposerais un tuto à moins que quelqu'un d'autre s'y mette avant moi.

    ++

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    112
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 112
    Points : 112
    Points
    112
    Par défaut
    Bon c'est beaucoup plus clair maintenant :

    Alors, comme nous le pensions tous, il faut être carré avec les encodages pour que tout se passe bien, quelque soit le type choisi (ISO, windows, UTF etc.)

    En tout premier lieu, renseigner le serveur sur le jeu de caractères à utiliser pour la page :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    '-- à placer au tout début, avant quoi que ce soit d'autre.
    CodePage="le code correspondant au jeu choisi"
    Liste des codes et une explication (EN) :
    http://en.wikipedia.org/wiki/Code_page

    En suite, on renseigne la même chose pour tout ce qui est "session" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Session.CodePage = "le code correspondant au jeu choisi"
    cf http://msdn.microsoft.com/en-us/library/ms525649.aspx
    Qui explique un peu toute la démarche d'ailleurs au passage (EN).

    Puis, les paramètres régionaux (ici en fr), à vous de faire le select case qui va bien en fonction de ce que vous souhaitez
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    '-- fr donc, traduira correctement les dates (jj/mm/aaaa) 
    session.LCID=&H040c
    Enfin, le charset de l'objet "response"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    '-- utf-8 en ce qui me concerne
    Response.Charset = "utf-8"
    Sans oublier le "DOCTYPE qui va bien" dans votre entête HTML et le meta associé.
    Pour le doctype, préférez "transitional" si vous n'êtes pas certain que de vieilles balises HTML 4.0 ne trainent pas dans vos pages, sinon, va pour le "Strict" qui est plus "rapide".
    En effet, "transitional" permet justement de faire la transition, il est plus tolérant, il fait donc plus de vérifications.

    Donc en résumé :
    -1- le jeu de caractère utilisé pour la page
    -2- le jeu de caractère pour l'objet "session"
    -3- le jeu de caractère pour l'objet "response"
    -4- le DOCTYPE pour la partie HTML
    -5- le meta correspondant

    Voilà, du coup tout marche nickel maintenant, je peux utiliser un Mid dans une chaine de caractères accentués, ça passe impec.

    ++

  13. #13
    Expert éminent
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Points : 9 512
    Points
    9 512
    Par défaut
    Y'a plus qu'à faire une petite classe ou fonction qui va bien

    Selon ce qu'on trouve dans Request.serverVariable("HTTP_ACCEPT_LANGUAGE") ou bien suite au clic sur un drapeau on pourrait faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ApplyCultureAndCoding(Request.serverVariable("HTTP_ACCEPT_LANGUAGE"), "UTF-8")
    ++

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 09/10/2009, 09h42
  2. Réponses: 4
    Dernier message: 03/09/2009, 14h49
  3. comment faire un programme pour trier les hommes et les femmes
    Par oudin77 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 20/05/2008, 16h14
  4. Réponses: 2
    Dernier message: 22/08/2007, 12h46

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