none
Comment empêcher un StreamWriter d'encoder en UTF8 RRS feed

  • Question

  • Bonjour,

    Je travaille en ANSI cp1252

    - La source de mes données est une exportation d'Excel vers texte avec tabulations. Et ça m'arrive comme ça en ANSIcp1252.

    - je dois mouliner ces données au format d'une base de données

    - quand je mouline et que j'injecte de suite, tout se passe bien et je récupère bien les bonnes lettres (é, É ...) dans ma base

    - par contre, dans certains cas, je dois ranger le résultat de la moulinette dans un fichier texte temporaire avant de pouvoir injecter plus tard mes données dans la base.
    Pour ce faire, j'utilise un StreamWriter. Par défaut il me donne de l'UTF8, ce qui ne me convient pas, je voudrais rester en cp1252 pour raison de compatibilité. J'ai essayé différents paramètre lors de la création de mon instance :
      Dim stwTemp As New System.IO.StreamWriter(.FileName) : UTF8
      Dim stwTemp As New System.IO.StreamWriter(.FileName, True, System.Text.Encoding.Default) : UTF8 sans BOM, qui est donc vu comme de l'ANSI mais mes é sont des é, et tout à l'avenant. D'après la doc ça devrait être la cp1252, mais ça le fait pas ....

    Qui connaît la solution ?

    Merci

     

    mardi 11 mai 2010 08:34

Réponses

Toutes les réponses

  • Bonjour,

     

    Essayez de créer l’objet StreamWriter de cette manière :

     

    Dim sw as new StreamWriter(.File, True, Encoding.GetEncoding(1252))

     

     

    Cordialement,

    Alex


    Appel à contribution ! http://social.msdn.microsoft.com/Forums/fr-FR/vbasicfr/thread/bd974e0e-5519-4122-b8fc-3b998207c34f
    mardi 11 mai 2010 13:47
  • 1- après correction (System.Text.Encoding etc,   car je n'ai pas mis Imports System.Text

    2- le fichier produit est vu comme codé ANSI par NotePad++, mais on y lit

    né à Abitain, son ex-épouse  est

    et quand on modifie l'indication de codage en UTF8, on lit

    né à Abitain, son ex-épouse  est

    ce qui montre que c'est un UTF8 sans BOM.....

    (j'en essayé d'autres, et tous font ça ...)

    N.B. En lecture (de mon ANSI venant d'Excel, j'ai mis, pour le StreamReader :

    Dim stmtemp As StreamReader = New StreamReader(dlgOuvrir.FileName, System.Text.Encoding.Default), et ça marche bien ....mais en sortie il donne de l'UTF8 qui ne s'assume pas (pas de BOM) ....

    Merci de vous donner de la peine pour moi.

     

    mardi 11 mai 2010 14:32
  • Bonjour,

     

    Un objet StreamWriter a un encodage UTF-8 sans BOM, comme spécifié dans la documentation MSDN :

    http://msdn.microsoft.com/fr-fr/library/wtbhzte9.aspx

     

     

    Peut-etre l’objet Encoding  avec sa methode GetPreamble  vous sera utile dans ce cas.

     

    Cordialement,

    Alex


    Appel à contribution ! http://social.msdn.microsoft.com/Forums/fr-FR/vbasicfr/thread/bd974e0e-5519-4122-b8fc-3b998207c34f
    • Marqué comme réponse marcel337564 mercredi 12 mai 2010 08:04
    mercredi 12 mai 2010 06:52
  • Merci Alex,

    Au fond, la nuit m'a porté conseil, et c'est vrai que ce CP1252 est une antiquité, je suis obligé de le subir en entrée de mes données venant d'Excel mais pas obligé de continuer pour mes fichiers auxiliaires;

    - je lis donc mes données primaires venant d'Excel avec un StreamReader, encodage Default=cp1252
    - je sauvegarde le résultat de ma moulinette en UTF8 avec un StreamWriter standard (sans paramètres)
    - je récupère cette sauvegarde avec un StreamReader, encodage UTF8

    Je viens de tester, ça marche au poil .....

    mercredi 12 mai 2010 08:11
  • Ça me semble une bonne solution. Bonne chance avec la continuation de votre projet ! J

     

    Cordialement,

    Alex


    Appel à contribution ! http://social.msdn.microsoft.com/Forums/fr-FR/vbasicfr/thread/bd974e0e-5519-4122-b8fc-3b998207c34f
    mercredi 12 mai 2010 08:15