none
Envoi d'un string en pièce jointe d'un email pour recevoir un fichier .csv RRS feed

  • Discussion générale

  • Bonjour.

    Contexte : programme console en VB 2010.

    Mon programme génère une chaîne (String) qui contient des lignes et des colonnes de données, séparées respectivement par vbCrLf et vbTab. La première ligne contient les titres de colonnes.

    J'écris cette chaîne dans un fichier (My.Computer.FileSystem.WriteAllText("NomFichier.csv", Chaine, False). Je lance Excel, j'ouvre le fichier, j'accepte les choix proposés par défaut, et tout se passe bien. J'ai généré un fichier texte en UTF-8.

    J'envoie cette même chaîne par email en pièce jointe :

      1) Conversion en Byte() pour envoi à une dll maison : System.Text.Encoding.UTF8.GetBytes(Chaine). Je lui passe aussi en paramètre un AttachmentName, et un MediaType text/csv.

      2) La dll crée un objet Attachment et l'attache à l'email :

      2a) NouveauMessage = New MailMessage

      2b) NouveauMessage.Attachments.Add(New Attachment(New System.IO.MemoryStream(ChaineRecue), AttachmentName , MediaType))

    L'email est bien reçu, avec sa pièce jointe. Mais Excel ne comprend pas la structure de colonnes ni les caractères accentués. Après enquête, il s'avère que le fichier reçu est en UTF-8 (sans BOM), c'est-à-dire qu'il y manque les trois octets de tête xEFBBBF. Si je les ajoute, Excel comprend le fichier. Si je les enlève à nouveau, Excel ne reconnaît plus les colonnes ni les caractères accentués.

    Question : comment faire pour que l'utilisateur reçoive un fichier en UTF-8 ? (Ou tout autre moyen qui permette d'ouvrir correctement le fichier dans Excel).

    Merci d'avance,

    Gilbert

    P.S. Au cas où cela aurait une importance - mais j'en doute - nous utilisons Lotus Notes 8

    jeudi 8 mars 2012 13:37

Toutes les réponses

  • Bonjour,
     
    La réponse est dans les BOM justement.
    WriteAllText les ajoute automatiquement alors que UTF8.GetBytes ne les
    ajoute pas.
    Les ajouter avant l'attachement est problématique ?
     

    Fred
    jeudi 8 mars 2012 16:21
  • Bonjour Fred,

    « Les ajouter avant l'attachement est problématique ? » Non.

    Sauf que j'avais déjà essayé de préfixer, mais avant l'appel à GetBytes alors que c'est après qu'il faut intervenir. Et cela fonctionne.

    Merci pour ton encouragement.

    Je reste néanmoins un peu perplexe avec cette solution peu élégante.

    Bonne soirée,

    Gilbert

    jeudi 8 mars 2012 17:05
  • Alors peut-être en ajoutant charset=utf-8 dans le content type mais je n'ai pas testé.


    Fred

    jeudi 8 mars 2012 17:36