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

Services Web Discussion :

Encodage ANSI vers UTF-16


Sujet :

Services Web

  1. #1
    Membre habitué
    Profil pro
    Chef de projet Technique
    Inscrit en
    Avril 2007
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet Technique

    Informations forums :
    Inscription : Avril 2007
    Messages : 89
    Points : 125
    Points
    125
    Par défaut Encodage ANSI vers UTF-16
    Bonjour,

    Je développe actuellement un service web en VB.Net, (avec le framework 2.0) qui doit décomposer un flux XML pour créer des requêtes SQL et les exécuter.
    J'ai donc procédé comme ci-dessous pour lire mon fichier XML
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <WebMethod()> Public Function ImportFluxXML(ByVal Flux_XML As String) As String
    Dim DocXML As New XmlDocument
    'Décomposion du Flux XML pour sauvegarder le contrôle'
    Try
    'chargement du flux XML dans l objet XMLDocument'
    DocXML.LoadXml(Flux_XML)
    Catch ex As Exception
        Return ex.Message
    End Try
    ''''''''''''''''''''''''''''''''''''''''
    'Lecture du flux
    Mon problème est que mon flux contient des 'é' et qu'il sont converti en '?' lorsque la chaine est passer au service web. Lorsque j’appelle LoadXml() j’obtiens alors l'erreur :
    Le caractère '?', valeur hexadécimale 0x3F, ne peut pas être inclus dans un nom. Ligne 2, position 27946.
    J'ai donc ajouté le code suivant pour convertir ma chaine ANSI en UTF-16:
    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
     
    <WebMethod()> Public Function ImportFluxXML(ByVal Flux_XML As String) As String
    Dim DocXML As New XmlDocument
    Dim Flux_XML_ANSI() As Byte
    Dim Flux_XML_UTF16 As String
     
    'convertion en UTF16'
    Flux_XML_UTF16 = ""
    Flux_XML_ANSI = Encoding.GetEncoding(1252).GetBytes(Flux_XML)
    Flux_XML_ANSI = Encoding.Convert(Encoding.GetEncoding(1252), Encoding.BigEndianUnicode, Flux_XML_ANSI)
    Flux_XML_UTF16 = Encoding.BigEndianUnicode.GetString(Flux_XML_ANSI)
     
    'Décomposion du Flux XML pour sauvegarder le contrôle'
    Try
        'chargement du flux XML dans l objet XMLDocument'
        DocXML.LoadXml(Flux_XML_UTF16)
    Catch ex As Exception
        Return ex.Message
    End Try
    ''''''''''''''''''''''''''''''''''''''''
    'Lecture du flux
    Mais les caractères '?' non pas été convertis en 'é'.

    Quelqu'un aurait il une solution ?

    Merci d'avance

  2. #2
    Expert confirmé Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Points : 5 487
    Points
    5 487
    Par défaut
    Bonsoir.

    D'abord, es-tu certain que la chaîne que tu reçois est bien encodée en ANSI 1252 et non pas en UTF-8 ? Ensuite, pour l'UTF-16 standard on utilise Encoding.Unicode.

  3. #3
    Membre habitué
    Profil pro
    Chef de projet Technique
    Inscrit en
    Avril 2007
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet Technique

    Informations forums :
    Inscription : Avril 2007
    Messages : 89
    Points : 125
    Points
    125
    Par défaut
    Bonjour,

    Merci pour la précision de Encoding.Unicode, mais après avoir testé le résultat reste le même, les 'é' sont toujours converti en '?'.
    Le programme appelant le service web est un programme fait en Windev 12 qui manipule des chaines ANSI, donc la chaine reçu par le service web est bien en ANSI.

    Quelqu'un a-t-il déjà rencontré le même problème?

  4. #4
    Expert confirmé Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Points : 5 487
    Points
    5 487
    Par défaut
    Il y a une petite mécompréhension de ta part en fait : la chaîne que tu possèdes n'est pas en ANSI, même si elle a été envoyée telle quelle. A la réception par le webservce, elle a été considéré comme une chaîne UTF-8 puis convertie en UTF-16 puisque, en interne, le dotnet framework ne fonctionne qu'en UTF-16. Evidemment cette chaîne UTF-16 est incorrecte puisque IIS a appliqué une conversion "UTF-8 vers UTF-16" à une chaîne ANSI.

    Donc si le client de ton webservice envoie tout en ANSI 1252 (et qu'il attend que les réponses soient encodées de la même façon), tu dois changer la configuration de ton service, via le fichier Web.config. Je t'invite à regarder la doc sur l'élément globalization

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <configuration>
       <system.web>
          <globalization 
             requestEncoding="iso-8859-1"
             responseEncoding="iso-8859-1"/>
       </system.web>
    </configuration>

  5. #5
    Membre habitué
    Profil pro
    Chef de projet Technique
    Inscrit en
    Avril 2007
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet Technique

    Informations forums :
    Inscription : Avril 2007
    Messages : 89
    Points : 125
    Points
    125
    Par défaut
    Après lecture de l'aide de globalization, j'ai ajouté la ligne suivante dans mon fichier web.config :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <globalization culture="fr-FR" requestEncoding="ISO-8859-1" responseEncoding="ISO-8859-1" responseHeaderEncoding="ISO-8859-1" uiCulture="fr-FR">
    Malheureusement j'ai toujours des caractère '?' au lieu de 'é' (avec ou sans le code de conversion de l'encodage)

    system.web.response.Charset="iso-8859-1", ce qui me laisse penser que la ligne ajoutée dans web.config à été prise en compte.

  6. #6
    Membre habitué
    Profil pro
    Chef de projet Technique
    Inscrit en
    Avril 2007
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet Technique

    Informations forums :
    Inscription : Avril 2007
    Messages : 89
    Points : 125
    Points
    125
    Par défaut
    Après avoir vérifié les communication entre mon client et mon serveur, je me suis aperçu que le flux envoyé par le serveur au clients a pour charset la valeur UTF-8 au lieu d'avoir pour valeur ISO-8859-1.
    Je pense donc que la ligne ci-dessous n'est pas prise en compte par IIS :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <globalization culture="fr-FR" requestEncoding="ISO-8859-1" responseEncoding="ISO-8859-1" responseHeaderEncoding="ISO-8859-1" uiCulture="fr-FR">
    En-tête générée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    HTTP/1.1 200 OK
    Cache-Control: private, max-age=0
    Content-Type: text/xml; charset=utf-8
    Server: Microsoft-IIS/7.0
    X-AspNet-Version: 2.0.50727
    X-Powered-By: ASP.NET
    Date: Mon, 01 Aug 2011 12:19:22 GMT
    Connection: close
    Content-Length: 367
    Quelqu'un aurait il une idée d'où pourrais provenir le problème?

Discussions similaires

  1. Fonction encodage ANSI UTF-8 sans bom
    Par dev14 dans le forum Langage
    Réponses: 2
    Dernier message: 28/10/2013, 17h34
  2. Problème d'encodage : ANSI => UTF-8
    Par Iverstan dans le forum Grails
    Réponses: 9
    Dernier message: 01/09/2010, 12h28
  3. Encodage windows-1251 vers utf-8
    Par Vigoo dans le forum Balisage (X)HTML et validation W3C
    Réponses: 0
    Dernier message: 17/08/2009, 18h31
  4. Encodage ANSI => UTF-8
    Par whorian dans le forum VB.NET
    Réponses: 5
    Dernier message: 10/05/2009, 09h22
  5. Encodage de chaine -> UTF-8
    Par klarky88 dans le forum MFC
    Réponses: 2
    Dernier message: 26/05/2005, 18h13

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