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 :

Quel est l'encodage d'une Text Box - Visual Basic 2012 ? Gros problème avec les accents.


Sujet :

VB.NET

  1. #1
    Membre habitué Avatar de excalybur
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Novembre 2014
    Messages
    305
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2014
    Messages : 305
    Points : 181
    Points
    181
    Par défaut Quel est l'encodage d'une Text Box - Visual Basic 2012 ? Gros problème avec les accents.
    Bonsoir,

    J'ai récupéré un fichier codé en ANSI avec les accents réalisé depuis une application sous Visual Basic 6 et Windows XP pro. Chaque fois que j'affiche un de ces fichiers sur visual Basic 2012 et windwos 7, 8 ou 10 sur un TextBox les accents sont tous remplacé par un losange noire avec un point d'interrogation.

    Notepad ++ et bloc-note ne lisent pas les accents de ce fichier ANSI. J'ai essayé les différents encodage proposé sur notepad++ sans succès (accents remplacé par des caractères hétéroclites).

    J'ai changé plusieurs polices (y compris par le triviale Arial) de ces textbox sans succès. Toujours des accents remplacé par des caractères hétéroclites).

    Or que Visual Basic 6 que j'ai sous Win 10 lit parfaitement bien ces accents dans ces textbox !

    De là à programmer un convertisseur ? OK mais quid ! La je sèche !

    Une idée ?

    A vous lire
    La Connaissance est comme le rire elle est contagieuse en la partageant!

  2. #2
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Sauf horreur de ma part, c'est de l'Unicode par défaut. Ceci dit, les différentes classes qui permettent de lire et d'écrire des fichiers textes ont une ou plusieurs méthodes surchargées qui permettent de modifier la méthode d'encodage, en fonction de la classe Encoding.
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

  3. #3
    Membre habitué Avatar de excalybur
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Novembre 2014
    Messages
    305
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2014
    Messages : 305
    Points : 181
    Points
    181
    Par défaut
    Bonjour

    Merci pour l'info ! Tout est dit Class Encoding ! Le topic de microsoft explique aussi ma question suivante que je n'ai pas posée : les caractères cyriliques !
    Reste à mettre en forme !

    Encore merci et a +
    La Connaissance est comme le rire elle est contagieuse en la partageant!

  4. #4
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    tu as un bouton résolu en bas de cette page, ca me permet de ne pas ouvrir un topic pour rien ^^
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre habitué Avatar de excalybur
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Novembre 2014
    Messages
    305
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2014
    Messages : 305
    Points : 181
    Points
    181
    Par défaut
    Bonsoir,

    Les choses s'éclaircissent ! Le programme VB 2012 n'est pas en cause, mon code :

    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
     Sub lectureFichier(ByVal fichier As String)
     
            Try
                ' Création d'une instance de StreamReader pour permettre la lecture du fichier recherché dans l'explorateur de fichiers
                Dim monStreamReader As StreamReader = New StreamReader(ToolStripTextBox1.Text, System.Text.Encoding.Default)  '  Default = unicode  
                Dim n, m, q, qq, qqq, yy As Integer
     
                'Lecture de 25 lignes du fichier séquentiel et affichage de chacune à sa place dans textbox
                Do
                    n = n + 1
                    Ligne_Lecture(n) = monStreamReader.ReadLine()
                Loop Until Ligne_Lecture(n) Is Nothing
     
                'Fermeture du StreamReader (attention très important)
                monStreamReader.Close()
     
                TextBoxNum.Text = Ligne_Lecture(1)
                TextBoxName.Text = Ligne_Lecture(2)
                RichTextBoxName.Text = Ligne_Lecture(2)
     
     
            Catch ex As Exception
     
                '    'Code exécuté en cas d'exception
                MsgBox("Une erreur est survenue au cours de la lecture !")
     
            End Try
     
    End Sub
    fonctionne parfaitement et les accents sortent nickel lors de saisie de nouveaux texte avec le programme et relecture des mêmes fichiers.

    Par contre le vieux fichier que je veut lire pose problème avec VB2012 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    1
    Ralf Kr�tschmer
    2001
    3 Price
    Problem-Forum
    Avec le caractère � représenté par un code 65533 dans l'exemple = ö !

    Donc il faut que je construise un convertisseur pour récupérer tous les accents ö ô ê é è î Ü ù etc... la liste est longue avec les danois, russes et autres européens ... on oubli le chinois !

    Mes fichiers étant séquentiel cela ne doit pas être très compliqué.

    Comment récupérer le code des caractères défaillant dans mes vieux fichiers et par quoi les remplacer pour être de l'Unicode ? Je présume qu'il y a des tables de conversion.

    Par la suite je vais tout compiler (500 000 fichiers) dans une base SQL mais avant il faut qu'elle soit alimenter par du propre.

    N'étant pas un spécialiste l'Unicode est-il la bonne solution pour la base SQL (sachant entre autre que j'ai aussi des caractères cyrilliques)

    Merci pour vos suggestions.
    La Connaissance est comme le rire elle est contagieuse en la partageant!

  6. #6
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    unicode n'est pas un encodage, c'est un jeu de caractères utilisé par beaucoup d'encodages

    quand on lit un fichier, ce sont des octets qui sont lus, et pour transformer ces octets en string, soit on ne précise rien et le framework doit surement utiliser l'encodage par défaut de windows
    mais on peut aussi préciser quel encodage on veut utiliser pour la lecture

    après si tu ne connais pas l'encodage utilisé dans le fichier, ce n'est pas ici qu'il faut demander de l'aide, mais au fournisseur du fichier

    tu peux aussi tester plusieurs encodages pour voir si un fonctionne, comme utf8, utf16, utf32, ansi et les dizaines d'encodages qui sont connus sous la forme iso-xxxx-x windows-xxxx etc...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  7. #7
    Membre habitué Avatar de excalybur
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Novembre 2014
    Messages
    305
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2014
    Messages : 305
    Points : 181
    Points
    181
    Par défaut
    Bonjour

    J'avais déjà essayé avec les standard évoqué dans l'aide en ligne UF 8 16 32 ... Quand aux iso j'en ai testé une dizaine sans succès.

    Je vais rechercher dans Visual Basic 6.0 quel est l'encodage utilisé par défaut à l'époque car c'est moi qui ai écrit ce programme avec VB6 et réalisé ces fichiers en 2000... Je cherche dans la doc et dans le forum.

    Je suis sur la bonne voie

    Merci et a+
    La Connaissance est comme le rire elle est contagieuse en la partageant!

  8. #8
    Membre habitué Avatar de excalybur
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Novembre 2014
    Messages
    305
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2014
    Messages : 305
    Points : 181
    Points
    181
    Par défaut
    J'ai écrit ce petit programme de conversion ANSI vers UTF8 :


    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
    Imports System.IO
    Imports System.Text
    Public Class Form1
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Dim reader As StreamReader = Nothing
            Dim writer As StreamWriter = Nothing
     
            Try
                reader = New StreamReader("f:\sb\3c\17.txt", Encoding.Default)
                writer = New StreamWriter("f:\sb\3c\17UTF8.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
            End
        End Sub
     
    End Class
    et je me suis rendu compte que cela fonctionne bien sur les fichiers récents mais pas les anciens qui ont dû être écrit probablement en ASCII amélioré à 256 caractères.

    Bref avec notepad++ j'ai compris que tous les ä son remplacé par ,, et les Ü et Ö par une double virgule en hauteur.

    Les accents classiques (à é è ù û ê... ) ont disparu : è devient e etc ...

    Moralité il faut corriger une grande partie à la main car à part d'avoir un mot qui se répète comme "theme" que l'on peut rechercher et remplacer dans le corps complet du fichier, les mots rares passerons le tamis .... sauf a visualiser chaque fiche.

    Ca promet ! Ces fichiers ont commencé en 1986 avec gw basic puis turbo basic 1 et 2, puis power basic 1,2 et 3 , puis VB4, puis vb6, et maintenant VB 2012 .... Ceci explique ce désordre. Mais bon il faut bien évoluer en 30 ans !

    En tout cas merci pour votre aide et vive la normalisation !
    La Connaissance est comme le rire elle est contagieuse en la partageant!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 21/07/2010, 15h36
  2. Réponses: 2
    Dernier message: 19/06/2009, 16h39
  3. [MySQL] Problème avec les accent lors d'une recherche dans ma base de donnée
    Par pierrot10 dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 16/06/2009, 14h08
  4. rendre invisible une texte box si elle est vide
    Par kuhnden dans le forum IHM
    Réponses: 4
    Dernier message: 09/03/2006, 01h55
  5. [HTML][Encodage] Problèmes avec les accents...
    Par eraim dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 26/05/2004, 10h11

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