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.NET Discussion :

problème d'encodage ISO /UTF


Sujet :

ASP.NET

  1. #1
    CUCARACHA
    Invité(e)
    Par défaut problème d'encodage ISO /UTF
    Salut,

    Je suis en train de bosser sur une notification SMS. J'ai un problème d'encodage et mes accents ne passent pas.

    Comme je ne suis pas très sûr de l'interface web que j'utilise, j'aimerais faire plusieurs tests.

    Je dois encoder une string en ISO8859-1 et en UTF-8.

    Ce que je ne sais pas c'est lorsqu'on écrit une simple chaîne accentuée dans le code source, elle est encodée en quoi par défaut ?

    D'avance merci

    Laurent

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Une chaîne .NET (System.String) est encodée en UTF-16

    Pour convertir dans un autre encodage, il faut transformer la String en un tableau d'octets qui représente les données de la chaîne dans l'encodage voulu. Par exemple, pour encoder en UTF8 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    byte[] utf8bytes = Encoding.UTF8.GetBytes("une chaîne Unicode");
    Pour l'ISO-8859-1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    byte[] utf8bytes = Encoding.GetEncoding("iso-8859-1").GetBytes("une chaîne Unicode");

  3. #3
    CUCARACHA
    Invité(e)
    Par défaut Un peu paumé là...
    Re,

    J'ai plus l'habitude de manipuler des entités plus complexes que les bases du C#...

    Comment transforme-t-on le tableau de bytes en string ?
    Le ToString ne fonctionne pas.
    Il ne faut quand même pas faire une boucle ?

    ++

    Laurent

  4. #4
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Points : 6 334
    Points
    6 334
    Par défaut
    Tu n'as pas cherché bien loin...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Encoding.UTF8.GetString(...)
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  5. #5
    CUCARACHA
    Invité(e)
    Par défaut
    C pas bien de se moquer des handicapés du bulbe...

    Chacun sa spécialité... En AMOA on ne code que très peu...

    Mais tu as raison, ça n'est pas une excuse... J'ai déjà essayé la neuro chirurgie mais ça a merdé...

    Merci pour l'info

    MAIS CA NE MARCHE TOUJOURS PAS... Ca doit être le service qui est pourrave...

    ++

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par Laurent Jordi Voir le message
    Comment transforme-t-on le tableau de bytes en string ?
    Le ToString ne fonctionne pas.
    Euh... si tu retransformes le tableau de bytes en String, ce sera toujours une string UTF-16 ! Il n'y a qu'une sorte de string, et c'est toujours en UTF-16. Si tu veux du texte dans un autre encodage tu le manipules sous forme de byte[].

  7. #7
    CUCARACHA
    Invité(e)
    Par défaut Bon je vais détailler mon besoin sinon on ne va pas s'en sortir...
    Donc, mon objectif est d'envoyer un SMS durant le pageload d'une ASPX qui est transformée pour renvoyer du VXML.

    Pendant le pageload, si tout se passe bien, je dois envoyer un SMS à l'appelant.

    Pour se faire j'utilise un service web (ou presque, je dirais plutôt un service sur le web) auquel je dois passer plein de paramètres en post.

    Suite à une grosse galère, j'ai enfin trouvé, mon SMS part.

    Toutefois, les accents merdent. Comme les encoding et les codes pages ont envahi la place, je n'y comprends plus rien...

    Voici le code (j'enleve les trucs intimes)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
     
                    /*Envoi du résultat par MC Tel*/
     
                    //http://www.worldofasp.net/tut/WebRequest/Working_with_HttpWebRequest_and_HttpWebResponse_in_ASPNET_114.aspx
     
                    // Create a new WebRequest Object to the mentioned URL.
     
     
                    string strSMSMsg = "xxxxx, lecture du " + dteAppel.Day + "/" + dteAppel.Month + "/" + dteAppel.Year + " à " + dteAppel.Hour + ":" + dteAppel.Minute + ". Valeur enregistrée : " + sngValeur + " " + strUniteDetails;
                    byte[] tBytesstrSMSMsg = Encoding.GetEncoding("iso-8859-1").GetBytes(strSMSMsg);
                    string strSMSMsg2 = Encoding.GetEncoding("iso-8859-1").GetString(tBytesstrSMSMsg);
                    Uri oUri = new Uri("http://smsgateway.mctel.fr/cgi-bin/sendsms.cgi");
                    //http://www.smsfax.fr/pdf/Manuel%20Interface%20HTTP%20HTML%20VideoSMS.pdf
                    string strData = "";
                    strData += "Command=sendsms";
                    strData += "&Version=1.0";
                    strData += "&UserId=AAAAAAAAAAAA";
                    strData += "&UserPwd=aaaaaaaaaaaaa";
                    strData += "&TestMode=0";
                    strData += "&CompanyId=MCTELWEBSMS";
                    strData += "&CompanyPwd=xxxxxxxxxxxxx";
                    strData += "&DestNum=" + Server.UrlEncode(strTelPatient);
                    strData += "&MsgContent=" + Server.UrlEncode(strSMSMsg2);
                    strData += "&MsgType=S";
                    strData += "&ContentType=TEXT";
                    strData += "&Encoding=ISO8859-1";//USC2";//ISO8859-1";
                    strData += "&OptDeferred=0";
                    strData += "&OptDefDate=";
                    strData += "&OptDefTime=";
                    strData += "&OptExpire=";
                    strData += "&OptExpiryDate=";
                    strData += "&OptOptExpiryTime=";
                    strData += "&OptNotifOnSuccess=1";
                    strData += "&OptNotifOnError=1";
                    strData += "&OptNotifType=EMAIL";
                    strData += "&OptNotifAddress=" + Server.UrlEncode("ppppppppp@gmail.com");
                    strData += "&OptFlash=0";
                    strData += "&OptReplace=0";
                    strData += "&PrivateData=" + Server.UrlEncode("\"DemoMode\"");
                    strData += "&PrivateReference=" + Server.UrlEncode("\"QQQQQ\"");
                    strData += "&Originator=mctel";
                    strData += "&Udhi=0";
                    strData += "&ReplyEnabled=0";
                    strData += "&Priority=0";
                    strData += "&Sessionid=";
                    strData += "&Sessionstate=";
                    if (oUri.Scheme == Uri.UriSchemeHttp)
                    {
                        HttpWebRequest oHttpWebRequest = (HttpWebRequest)HttpWebRequest.Create(oUri);
                        oHttpWebRequest.Method = WebRequestMethods.Http.Post;
                        oHttpWebRequest.ContentLength = strData.Length;
                        oHttpWebRequest.ContentType = "application/x-www-form-urlencoded";
                        oHttpWebRequest.Headers.Add("Accept-Charset: utf-8");
                        oHttpWebRequest.ContentLength = strData.Length;
     
                        StreamWriter oStreamWriter = new StreamWriter(oHttpWebRequest.GetRequestStream());
                        oStreamWriter.Write(strData);
                        oStreamWriter.Close();
     
                        HttpWebResponse oHttpWebResponse = (HttpWebResponse)oHttpWebRequest.GetResponse();
                        StreamReader oStreamReader = new StreamReader(oHttpWebResponse.GetResponseStream());
                        string strTmp = oStreamReader.ReadToEnd();
                        oHttpWebResponse.Close();
                    }
    Si vous arriviez a m'aider sur ce coup là... ça serait kool...

    ++

    Laurent

  8. #8
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Points : 6 334
    Points
    6 334
    Par défaut
    Apparemment le jeu de caractère et encoding pour les SMS serait UFT-16/UCS2 :
    http://en.wikipedia.org/wiki/UTF-16/UCS-2

    A toi de voir comment gérer ça avec les outils du framework.
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  9. #9
    CUCARACHA
    Invité(e)
    Par défaut je crois que je vais tout mettre en majuscules...
    Je vais tout mettre en majuscules au moins je ne serais plus embété par les accents...(en attendant que quelqu'un puisse m'aider)...

    ++

    Laurent

  10. #10
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Essaie de remplacer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    StreamWriter oStreamWriter = new StreamWriter(oHttpWebRequest.GetRequestStream());
    par ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    StreamWriter oStreamWriter = new StreamWriter(oHttpWebRequest.GetRequestStream(), Encoding.UTF8);
    (En changeant éventuellement l'encodage utilisé)
    D'après le PDF dont l'url est dans ton code, c'est ISO-8859-1, mais on peut aussi utiliser Unicode. Donc je dirais que tu peux utiliser à peu près ce que tu veux, mais il faut l'indiquer dans le header de ta requête (Content-Encoding ou qqch comme ça)

Discussions similaires

  1. [phpMyAdmin] UTF-8 et phpMyAdmin : problèmes d'encodage
    Par -DeN- dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 29
    Dernier message: 29/05/2016, 11h27
  2. Problème d'encodage utf-8/iso-8859-15
    Par KR_Prog dans le forum Général Python
    Réponses: 2
    Dernier message: 16/11/2012, 00h07
  3. [MySQL] Problème d'encodage en utf-8
    Par Natsuko dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 06/02/2012, 15h32
  4. Problème d'encodage : ANSI => UTF-8
    Par Iverstan dans le forum Grails
    Réponses: 9
    Dernier message: 01/09/2010, 12h28
  5. Problème d'encodage en UTF-8
    Par navis84 dans le forum Langage
    Réponses: 5
    Dernier message: 29/08/2006, 11h19

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