none
comment afficher correctement les caractères dans un listbox ascii unicode ? RRS feed

  • Question

  • Bonjour

    Mon application charge un fichier texte qui contient un ou plusieurs mots par ligne à l'aide d'un streamreader

    Dim fileReader As System.IO.StreamReader
    
          fileReader = My.Computer.FileSystem.OpenTextFileReader(.FileName, System.Text.Encoding.Default)
    
          Dim stringReader As String = ""
    
          lstbEleves.Items.Clear()
    
          While Not fileReader.EndOfStream
    
           stringReader = (Trim(fileReader.ReadLine())).ToUpper 'ne tiens pas compte des majuscules
    
           stringReader = Regex.Replace(stringReader, "\s", " ")
    
    
    
           lstbEleves.Items.Add(stringReader)
    
          End While
    
          fileReader.Close()
    
    

    Le problème est que je n'ai pas la main sur l'encodage du fichier texte que j'ouvre : il peut être codé en Ansi ou en UTF8 avec ou sans BOM etc. J'obtiens donc dans mon listbox des affichages étranges avec les caractères accentués notamment... Comment faire pour que le listbox adapte son affichage au type d'encodage du strindreader (ou plutôt du texte "lu" par lui)

    merci

    pascal


    http://www.scalpa.info
    mardi 16 novembre 2010 21:13

Réponses

  • Bonjour,

    Les chaînes de caractères montées en mémoire sont obligatoirement au format UTF-16. C'est donc à vous de trouver le bon encodage de votre fichier au moment du OpenTextFileReader() afin que .NET puisse convertir les caractères de vos fichiers au format UTF-16.

    La détection de l'encodage peut se faire en utilisant le bibliothèque MLang de Microsoft (utilisé par exemple par Internet Explorer) : http://msdn.microsoft.com/en-us/library/aa767865(VS.85).aspx

    Voici un article qui explique comment utiliser cette bibliothèque : http://www.codeproject.com/KB/recipes/DetectEncoding.aspx

    NOTE : La détection de l'encodage est une opération non fiable (il se peut qu'une chaîne de caractère soient représentée de la même manière avec deux encodages différents). C'est pour cela qu'il faut toujours savoir l'encodage réellement utilisé lorsqu'on lit un fichier (par exemple XML impose de marquer l'encodage dans la balise de début).

    Cordialement


    Gilles TOURREAU - MVP C# - MCPD Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5 - MCTS ADO .NET 3.5 / SQL Server 2008 Developper - Architecte .NET/Consultant/Formateur - http://gilles.tourreau.fr
    • Marqué comme réponse scalpa mardi 16 novembre 2010 22:22
    mardi 16 novembre 2010 21:53
    Modérateur

Toutes les réponses

  • Bonjour,

    Les chaînes de caractères montées en mémoire sont obligatoirement au format UTF-16. C'est donc à vous de trouver le bon encodage de votre fichier au moment du OpenTextFileReader() afin que .NET puisse convertir les caractères de vos fichiers au format UTF-16.

    La détection de l'encodage peut se faire en utilisant le bibliothèque MLang de Microsoft (utilisé par exemple par Internet Explorer) : http://msdn.microsoft.com/en-us/library/aa767865(VS.85).aspx

    Voici un article qui explique comment utiliser cette bibliothèque : http://www.codeproject.com/KB/recipes/DetectEncoding.aspx

    NOTE : La détection de l'encodage est une opération non fiable (il se peut qu'une chaîne de caractère soient représentée de la même manière avec deux encodages différents). C'est pour cela qu'il faut toujours savoir l'encodage réellement utilisé lorsqu'on lit un fichier (par exemple XML impose de marquer l'encodage dans la balise de début).

    Cordialement


    Gilles TOURREAU - MVP C# - MCPD Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5 - MCTS ADO .NET 3.5 / SQL Server 2008 Developper - Architecte .NET/Consultant/Formateur - http://gilles.tourreau.fr
    • Marqué comme réponse scalpa mardi 16 novembre 2010 22:22
    mardi 16 novembre 2010 21:53
    Modérateur
  • merci pour cette prompte réponse. Devant l'ampleur de la tâche que je ne soupçonnais pas, je vais changer mon fusil d'épaule et obliger l'utilisateur à Ansi.
    http://www.scalpa.info
    mardi 16 novembre 2010 22:22