IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Conversion de chaîne de caractères.


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Technicien de bureau d etude
    Inscrit en
    Avril 2011
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien de bureau d etude
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 111
    Par défaut Conversion de chaîne de caractères.
    Bonjour à tous,

    Le contexte est le suivant :
    Je récupère du texte sur un fichier codé en CP850 ainsi que du texte sur une page web codée en UTF8.
    Pour cela j'utilise un stream reader pour l'un et un WebClient.Downloadstring pour l'autre.
    Chacun voit sa propriété encoding décalaré explicitement.

    Je doit en sortir un fichier texte encodé en Windows 1252, j'utilise pour cela un StreamWriter avec l'encodage spécifié lui aussi.

    Ce même fichier est envoyer sur un site pour mettre des produits en ligne et là c'est le drame : Les caractères accentué ne sortent pas.

    Ma question est la suivante : Est-ce que ma démarche est bonne ou doit-je faire une opération de conversion sur mes chaines de caractère, car si j'importe mon fichier sur Excel ou sur notepad++, il ressort bien .

    Merci !

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par a.floranc Voir le message
    Est-ce que ma démarche est bonne
    A vue de nez le principe semble correct, donc il y a sans doute un problème au niveau du code. Montre le code concerné.

    Citation Envoyé par a.floranc Voir le message
    ou doit-je faire une opération de conversion sur mes chaines de caractère
    Non, la notion d'encodage n'a pas de sens pour une chaine ; en pratique, le type String de .NET utilise UTF-16 en interne, mais ça n'a (généralement) pas d'impact sur la façon de l'utiliser. La notion d'encodage n'intervient que quand tu veux convertir le texte en une représentation binaire, par exemple pour l'écrire dans un fichier.

  3. #3
    Membre confirmé
    Homme Profil pro
    Technicien de bureau d etude
    Inscrit en
    Avril 2011
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien de bureau d etude
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 111
    Par défaut
    Merci pour ta réponse.

    Voici les bouts de codes :

    Lecture du fichier en CP 850 :
    Je lit puis peuple une collection nommée ListArticles

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
            Dim i = 0
            Dim readRow As String
            Using sr As StreamReader = New StreamReader(FileName, System.Text.Encoding.GetEncoding("CP850"), True)
                Do
                    readRow = sr.ReadLine()
                    If readRow = Nothing Then Exit Do
                    CreateArticle(readRow, ListArticles)
                    i = i + 1
                Loop While readRow IsNot Nothing
            End Using
    Fonction pour récuperer le texte sur la page web où je retourne une string :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
        Public Function DownloadProdcutText(Url As String)
     
            'doc2 = doc.Load(url, "proxyorb", 8080, "a_floranc", "alex22")
     
            'init
            Dim wc = New WebClient()
            Dim doc = New HtmlAgilityPack.HtmlDocument()
            wc.Encoding = System.Text.Encoding.UTF8
            ' wc.Proxy = prox
            Dim ErrorHttp As Boolean = False
     
            'url1
            Try
                Dim Text As String = wc.DownloadString("http://www2.softcarrier.at/htmlkat/1/fr/html/" & Url.Replace(".JPG", "") & ".html")
                doc.LoadHtml(Text)
                'Using stream As Stream = wc.OpenRead("http://www2.softcarrier.at/htmlkat/1/fr/html/" & Url.Replace(".JPG", "") & ".html")
                ' doc.Load(stream)
                'End Using
            Catch ex As WebException
                ErrorHttp = True
            End Try
            'Url 2
            If ErrorHttp = True Then
                Try
                    Dim Text As String = wc.DownloadString("http://www3.fr.softcarrier.com/hbdb/sclinks/htmlkat/2/fr/html/" & Url.Replace(".JPG", "") & ".html")
                    doc.LoadHtml(Text)
                Catch ex As WebException
                    Return ""
                End Try
            End If
     
            wc.Dispose()
     
            'Recherche de la description
            Dim tagId2 = doc.DocumentNode.Descendants("td").Where(Function(t) t.GetAttributeValue("class", "") = "im_themenkatalog_produkttext")
            Dim valID2 = tagId2.Select(Function(t) t.Element("div"))
            If valID2.Count <> 0 Then
     
                Return valID2.Select(Function(t) t.InnerHtml).First().Replace(vbCrLf, " ")
            Else
                Return ""
            End If
     
        End Function
    Ecriture du fichier de sortie où My.settings.EncodingExport est égale à windows-1252

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
       Sub WriteOutPutFile(Path As String, OutPutFile As IEnumerable(Of OutArticle))
     
            Dim I As Long = 0
            Dim Separator As String = vbTab
     
            Dim FileToWrite As New OutArticles
     
            CreatEntete(FileToWrite)
            For Each OutArt2 As OutArticle In OutPutFile
                FileToWrite.Add(OutArt2)
            Next
     
            Dim Tot As Long = FileToWrite.Count
     
            Using sr As StreamWriter = New StreamWriter(Path, False, System.Text.Encoding.GetEncoding(My.Settings.EncodingExport))
     
                For Each OutArt As OutArticle In FileToWrite
                    sr.WriteLine(String.Concat(OutArt.Type_action, _
                    Separator, _
                    OutArt.Reference, _
                    Separator, _
                    OutArt.Nom_de_la_categorie_1, _
                    Separator, _
                    OutArt.Image_de_la_categorie_1, _
                    Separator, _
                    OutArt.Nom_de_la_categorie_2, _
                    Separator, _
                    OutArt.Image_de_la_categorie_2, _
                    Separator, _
                    OutArt.Nom_de_la_categorie_3, _
                    '(.....................)
                    Separator, _
                    OutArt.EOF))
                    I += 1
                    If Tot = 0 Then
                        BackgroundWorkerEcriture.ReportProgress(100)
                    Else
                        BackgroundWorkerEcriture.ReportProgress((I / Tot) * 100)
                    End If
                Next
                sr.Close()

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Bon, là comme ça je ne vois pas de problème évident... tu as essayé d'exécuter en pas à pas et d'examiner le texte au moment où il est lu ?
    Les accents sont foireux partout ? ou seulement dans les données qui viennent du fichier ? ou seulement dans les données qui viennent du web ?
    C'est possible aussi que le problème vienne de Html Agility Pack, il y a parfois quelques bugs...

  5. #5
    Membre confirmé
    Homme Profil pro
    Technicien de bureau d etude
    Inscrit en
    Avril 2011
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien de bureau d etude
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 111
    Par défaut
    Je vais encore regarder mais oui, les accent sont mauvais partout.

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Quel type de fichier tu génères ? Texte, HTML... ?
    Et avec quoi tu l'ouvres pour voir que les accents sont mauvais ?

Discussions similaires

  1. Conversion de chaînes de caractères en numérique
    Par djelloharmel dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 21/12/2011, 11h03
  2. [LIST] Problème de conversion de chaînes de caractères
    Par yannick29000 dans le forum Autres langages
    Réponses: 0
    Dernier message: 31/07/2009, 12h10
  3. Typage -> conversion en chaîne de caractère
    Par CodeCRC dans le forum Général Python
    Réponses: 1
    Dernier message: 30/06/2009, 17h57
  4. Conversion de chaîne de caractères
    Par mr_samurai dans le forum Fortran
    Réponses: 6
    Dernier message: 23/01/2008, 08h44
  5. Conversion de chaîne de caractères
    Par fracam2 dans le forum Access
    Réponses: 3
    Dernier message: 19/07/2006, 11h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo