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 :

Encodage ANSI => UTF-8


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    61
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 61
    Par défaut Encodage ANSI => UTF-8
    Bonjour,

    Comment faire pour changer l'encodage d'un fichier?

    Par exemple, j'ai un fichier "test.txt", encodé en ANSI, que je dois:

    1- Ouvrir le fichier en ANSI.
    2- L'enregistrer sous un autre nom en UTF-8.

    Comme c'est une opération relativement commune, je ne veux pas réinventer la roue.

    La solution doit être compatible framework 1.1 autant que 2.0.

    Merci pour les pistes.

  2. #2
    Membre chevronné Avatar de roster
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    397
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 397
    Par défaut
    Il y a la méthode Convert de System.Text.Encoding:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    byte[] unicodeBytes = Encoding.Unicode.GetBytes(stringSrc);
    Encoding.Convert(Encoding.Unicode, Encoding.UTF8, unicodeBytes);

  3. #3
    Membre chevronné Avatar de roster
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    397
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 397
    Par défaut
    Désolé pour le C#, la même chose en vb:



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Dim unicodeBytes As Byte() = Encoding.Unicode.GetBytes(stringSrc)
    Encoding.Convert(Encoding.Unicode, Encoding.UTF8, unicodeBytes)

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    480
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 480
    Par défaut
    Voici un bout de code que j'utilise pour transformer un fichier en l'encodant différemment :

    Code VB : 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
    45
    46
    47
    48
    49
    50
    51
    52
     '=======================================================================
            '3. On lit le fichier pour stocker les données dans le datatable dttData
            '=======================================================================
            If System.IO.File.Exists(filename) Then
                Dim fs As New System.IO.StreamReader(filename)
                Dim idxLigne As Integer = 0
                While Not fs.EndOfStream
                    Dim str As String = fs.ReadLine
                    Dim dtr As DataRow = dttData.NewRow
                    dttData.Rows.Add(dtr)
                    For i As Integer = 0 To dttFileStructure.Rows.Count - 1
                        Dim start As Integer = dttFileStructure.Rows(i).Item("position").ToString
                        Dim range As Integer = dttFileStructure.Rows(i).Item("range").ToString
     
                        dttData.Rows(idxLigne).Item(i) = str.Substring(start - 1, range)
                    Next
                    idxLigne += 1
                End While
                fs.Close()
            Else
                ' Gestion du LOG erreur
                Dim err As New cLog
                err.Trace_error(cnx, work_id, 1, "ERREUR : le fichier " & filename & " est introuvable")
                Throw New Exception("ERREUR : le fichier " & filename & " est introuvable")
            End If
     
            '=======================================================================
            '4. On trim toutes les données
            '=======================================================================
            For Each row As DataRow In dttData.Rows
                Dim rowTrimed As DataRow = dttDataTrimed.NewRow()
                For i As Integer = 0 To dttData.Columns.Count - 1
                    rowTrimed(i) = row(i).ToString.Trim
                Next
                dttDataTrimed.Rows.Add(rowTrimed)
            Next
     
            '=======================================================================
            '5. On ecrit dttDataTrimed dans un fichier
            '=======================================================================
            Dim fs_out As New System.IO.StreamWriter(filename & ".transform", False, System.Text.Encoding.Unicode)
            For i As Integer = 0 To dttDataTrimed.Rows.Count - 1
                Dim str_out As New System.IO.StringWriter
                For j As Integer = 0 To dttDataTrimed.Columns.Count - 1
                    str_out.Write(dttDataTrimed.Rows(i).Item(j).ToString)
                    If Not j = dttDataTrimed.Columns.Count - 1 Then
                        str_out.Write(vbTab)
                    End If
                Next
                fs_out.WriteLine(str_out.ToString)
            Next
            fs_out.Close()

  5. #5
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    C'est un peu compliqué pour modifier l'encodage d'un fichier texte je trouve. Je ferais plutôt ceci
    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
    Dim reader As StreamReader = Nothing
    Dim writer As StreamWriter = Nothing
     
    Try
        reader = New StreamReader("MonFichierAnsi.txt", Encoding.Default)
        writer = New StreamWriter("MonFichierUTF8.txt", False, Encoding.UTF8)
     
        While Not reader.EndOfStream
            writer.WriteLine(reader.ReadLine())
        End While
    Finally
        If reader <> Nothing Then
            reader.Close()
        End If
        If writer <> Nothing Then
            writer.Close()
        End If
    End Try

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    480
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 480
    Par défaut
    Oui j'avoue, j'ai pris mon code tel quel.

    Petite précision, dans mon code j'importe un fichier dont les champs sont compris dans des zones de position et taille fixe. Ce fichier est décris dans la datatable dttFileStructure avec les colonnes position et range). Je transforme ce fichier en supprimant les espaces dans chaque colonne puis je me mets dans un autre fichier (.transform)

    Ensuite je BULK INSERT le .transform dans une table et enfin j'importe la table inséré ainsi dans mes tables de données spécifiques.

    Donc oui effectivement c'est un peu compliqué pour seulement modifier l'encodage... mais certaines personnes y trouveront peut être une utilité étendue.

Discussions similaires

  1. Fonction encodage ANSI UTF-8 sans bom
    Par dev14 dans le forum Langage
    Réponses: 2
    Dernier message: 28/10/2013, 17h34
  2. Encodage ANSI vers UTF-16
    Par Xanime dans le forum Services Web
    Réponses: 5
    Dernier message: 01/08/2011, 14h27
  3. Problème d'encodage : ANSI => UTF-8
    Par Iverstan dans le forum Grails
    Réponses: 9
    Dernier message: 01/09/2010, 12h28
  4. Changer l'encodage du fichier (utf-8, iso, etc.)
    Par Dimitri01 dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 13/04/2007, 09h02
  5. Encodage de chaine -> UTF-8
    Par klarky88 dans le forum MFC
    Réponses: 2
    Dernier message: 26/05/2005, 18h13

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