none
charactère "+" non lu avec StreamReader crée avec Encoding explicite. RRS feed

  • Question

  •  

    Bonjour,

    Le charactère "+" nest pas lu si le "Streamreader" est crée avec encodage explicte comme si dessous:

    StreamReader inRD = new StreamReader(Config.GetInFile(),Encoding.UTF7);

    L'encodage choisi n'est pas imporatant. Avec ASCII ou UTF8 on a le même resultat. Sans declaration explicite le "+" est bien lu, mais cette option crée d'autres problèmes.

     

    J'utilise Visual Studio Express Edition 2010.

     

    mardi 16 août 2011 13:58

Réponses

  • C'est Windows-1252, une extension de ISO-8859-1

    Voila donc comment ouvrir ton document sans passer par le bloc note :

    StreamReader inRD = new StreamReader(Config.GetInFile(),Encoding.GetEncoding(1252));
    


    Cordialement,

     

    Rudy


    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 22 août 2011 08:44

Toutes les réponses

  • Vérifie l'encodage de ton fichier config, et adapte le paramètre en conséquent. StreamReader ne va pas te converter l'encodage, en mettant le paramètres, tu le forces à lire les données avec un encodage spécifique c'est tout.

     

    SI tu veux vraiment converter un encodage vers un autre :

     

      Encoding ascii = Encoding.ASCII;
         Encoding unicode = Encoding.Unicode;
    
         // Convert the string into a byte[].
         byte[] unicodeBytes = unicode.GetBytes(unicodeString);
    
         // Perform the conversion from one encoding to the other.
         byte[] asciiBytes = Encoding.Convert(unicode, ascii, unicodeBytes);
          
         // Convert the new byte[] into a char[] and then into a string.
         // This is a slightly different approach to converting to illustrate
         // the use of GetCharCount/GetChars.
         char[] asciiChars = new char[ascii.GetCharCount(asciiBytes, 0, asciiBytes.Length)];
         ascii.GetChars(asciiBytes, 0, asciiBytes.Length, asciiChars, 0);
         string asciiString = new string(asciiChars);
    
    


    Sinon tu peux toujours utiliser le constructeur (Stream, bool) ou bool signifie detectEncodingFromByteOrderMarks

     

    http://msdn.microsoft.com/fr-fr/library/7bc2hwcb(v=VS.80).aspx


    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 16 août 2011 23:03
  • Bonjour, ChriWoStab,

    Est-ce que vous avez testé les solutions proposées ? Merci de partager avec nous les résultats, afin que d'autres personnes avec le même problème puissent profiter de cette solution.

     

    Cordialement,

    Cipri


    Suivez MSDN sur Twitter   Suivez MSDN sur Facebook


    Ciprian DUDUIALA, MSFT  
    •Nous vous prions de considérer que dans le cadre de ce forum on n’offre pas de support technique et aucune garantie de la part de Microsoft ne peut être offerte.

    jeudi 18 août 2011 06:26
  • Merci pour les reponses. Je crains que j'ai mal formulé mon problème. J'essaye de le placer dans son contexte:

     

    1. Je dispose d'une feuille de calcul Excel. Les colonnes contienent des noms, des titres, des mnémonique identifiant des supports etc....

    2. j'exporte la feuille de calcul en fichier HTML, que je tente de lire par un programme C# pour alimenter une base de donnée MySQL.

    3. Certains colonnes sont utiisé pour identifier des fichiers sur mon PC.

    La feuille Excel contient des mots non anglais écrit avec des charactères accentuées (cas de mots français) ou avec des trema (allemand).

    L'exportation vers HTML est OK, tous les charactères se retrouvent lisibles.

    En lisant le fichier HTML avec Streamreader sans imposer Encoding les charactères ne correspondants pas à de l'ASCII de base sont remplacé par un gribouillage.

    D'ou l'idée de forcer l'utilisation d'un encodage spécifique. L'utilisation de "Encoding.UTF7" ou "Encoding.UTF8" fait apparaitre les charactères de façon correcte.

    Par contre le charactère "+" n'est plus rendu, ou mal rendu selon le contexte.  Ce problème apparait dès qu'on force l'utilisation d'un encoding quelconque.

     

    J'ai trouvé un contournement - hors programme - assez horrible en exploitant le fait, que je peux manipuler les données d'entrée.

     

    Cordialement

     

     

    jeudi 18 août 2011 10:41
  • Bonjour chriWoStab,

    Essaye da méthode File.ReadAllText en lui passant comme paramètre d'encodage new UTF8Encoding(false).

    Bien cordialement,


    aelassas.free.fr
    jeudi 18 août 2011 21:48
    Auteur de réponse
  • Bonjour,

     

    Merci pour tous vos reponses. L'utilisation de File.ReadAllText ne change malheureusement rienau problème. Par contre j'ai comprisl'origine du problème. L'exportation par Excel d'une feuille de calcul vers un fichier html ne genére pas du unicode pur et dur mais un format "windows (europe occidental)". Si on ouvre le html avec Wordpad et sauve en format UNICODE le probmème disparait.

     

    Cordialement

     

    ChiWoStab

    vendredi 19 août 2011 11:15
  • Bein si tu connais l'encodage des fichiers pourquoi tu passe pas l'encodage au Stream
     Encoding.GetEncoding("ton encodage")

    aelassas.free.fr
    vendredi 19 août 2011 14:39
    Auteur de réponse
  • C'est Windows-1252, une extension de ISO-8859-1

    Voila donc comment ouvrir ton document sans passer par le bloc note :

    StreamReader inRD = new StreamReader(Config.GetInFile(),Encoding.GetEncoding(1252));
    


    Cordialement,

     

    Rudy


    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 22 août 2011 08:44
  • Merci,

     

    J'ai testé la dernère solution - spécifier "Encodeng.GetEncoding(1252)" - et elle fonctionne correctement.

     

    Cordialement

     

    Chriwostab

    mercredi 24 août 2011 15:34