locked
Encodage ISO et UTF8 (XML) RRS feed

  • Question


  • Bonjour,
    Je développe actuellement une application qui a besoin de lire des fichiers XML (RSS). Tout se passe très bien lorsque le fichier est encodé en UTF-8, par contre problème lorsque l'encodage est en ISO-8859-1.
    J'utilise les WebClient pour télécharger les fichiers et lorsque le téléchargement est terminé, je continue avec les XElement. J'ai lu qu'il était possible de dire au WebClient quel encodage utiliser pour le téléchargement, mais est-il possible de détecter l'encodage automatiquement ?
     
     
    WebClient wc = new WebClient();   
    wc.DownloadStringAsync(new Uri(UrlTbox.Text));
    wc.DownloadStringCompleted += new DownloadStringCompletedEventHandler(wc_DownloadStringCompleted);
    
    
    private void wc_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
            {
    XElement xml = XElement.Parse(e.Result);
    ...
               }
    

    Microsoft Student Partner (2010/2012) - Microsoft Innovation Center (intern)
    lundi 23 janvier 2012 10:16

Réponses

  • mince je pensais t'avoir répondu hier, voici une regex pour récupérer ton encodage

     

    var reg=new Regex("<\?xml[^>]+encoding=\"(?<encoding>[^"]+)\"");

    var match=reg.Match(source);

    if(match.Success)

    {

    var encod=match.Groups["encoding"].Value;

    }


    S'il vous plaît n'oublier pas de marquer la ou les réponses qui aident à résoudre votre problème. Pour que la discussion puisse être marquée comme résolue
    mardi 24 janvier 2012 09:12

Toutes les réponses

  • Bonjour,

    Il faudrait pour ce faire passer par une étape supplémentaire (juste pour cette détection) et récupérer la string résultante dans un StreamReader , qui expose une méthode CurrentEncoding.

    (par contre je n'ai pas les moyens de tester cela tout de suite, donc cela reste une supposition)

    Voir => http://msdn.microsoft.com/en-us/library/system.io.streamreader.currentencoding(v=vs.95).aspx


    Pour que la discussion puisse être identifiée comme résolue merci de marquer les réponses qui vous ont aidées à solutionner votre problème comme "réponse".
    lundi 23 janvier 2012 10:48
  • Non, CurrentEncoding ne gere pas une detection automatique de l'encodage, c'est juste l'encodage utilisé lors du constructeur de StreamReader (UTF8 par defaut)

     

     


    S'il vous plaît n'oublier pas de marquer la ou les réponses qui aident à résoudre votre problème. Pour que la discussion puisse être marquée comme résolue
    lundi 23 janvier 2012 11:13
  • Utilise une WebRequest histoire d'avoir la main sur le flux : 

     

    public void GetFeed()
    {
        HttpWebRequest request = HttpWebRequest.CreateHttp("http://www.rudyhuyn.com/blabla");
        request.BeginGetResponse(new AsyncCallback(HandleResponse), request);
    }
     
    public void HandleResponse(IAsyncResult result)
    {
        HttpWebRequest request = result.AsyncState as HttpWebRequest;
     
        if (request != null)
        {
            using(WebResponse response = request.EndGetResponse(result))
            {
             String contenttype=  response.ContentType;
    
     using (StreamReader reader = new StreamReader(response.GetResponseStream()))
                {
                    string feed = reader.ReadToEnd();
               
                }
            }
        }
    }
    


    dans contenttype, tu auras potentiellement un truc comme

    Content-Type: text/html; charset=UTF-8


    S'il vous plaît n'oublier pas de marquer la ou les réponses qui aident à résoudre votre problème. Pour que la discussion puisse être marquée comme résolue
    lundi 23 janvier 2012 11:19
  • Arf! Au temps pour moi, j'ai lu en diagonal (et comme précisé, pas moyen de tester)...

    Sinon j'ai trouvé ça => http://utf8checker.codeplex.com/ Je ne sais pas ce que ça vaut ni si cela sera adaptable, mais ça peut être intéressant de jeter un oeil.


    Pour que la discussion puisse être identifiée comme résolue merci de marquer les réponses qui vous ont aidées à solutionner votre problème comme "réponse".
    lundi 23 janvier 2012 12:41
  • ca fonctionne sur un systeme de probabilité et de statistique, donc pas forcément super fiable sur des petites chaines ;)
    S'il vous plaît n'oublier pas de marquer la ou les réponses qui aident à résoudre votre problème. Pour que la discussion puisse être marquée comme résolue
    lundi 23 janvier 2012 14:27
  • Merci, je vais essayer de me débrouiller avec ça :)

    Il n'aurait pas été possible de récupèrer le type d'encodage directement dans le xml ?

    <?xml version="1.0" encoding="utf-8"?>
    

    Via les XElement par exemple, c'est pas possible?


    Microsoft Student Partner (2010/2012) - Microsoft Innovation Center (intern)
    lundi 23 janvier 2012 17:03
  • mince je pensais t'avoir répondu hier, voici une regex pour récupérer ton encodage

     

    var reg=new Regex("<\?xml[^>]+encoding=\"(?<encoding>[^"]+)\"");

    var match=reg.Match(source);

    if(match.Success)

    {

    var encod=match.Groups["encoding"].Value;

    }


    S'il vous plaît n'oublier pas de marquer la ou les réponses qui aident à résoudre votre problème. Pour que la discussion puisse être marquée comme résolue
    mardi 24 janvier 2012 09:12
  •  J'avais pas pensé aux regex. Merci beaucoup :)
    Microsoft Student Partner (2010/2012) - Microsoft Innovation Center (intern)
    mardi 24 janvier 2012 11:59