none
Visual basic 2008 Express edition et caractères accentués RRS feed

  • Question

  •  

    Problème avec les caractères accentués : l'éditeur fonctionne correctement avec les caractères accentués. Par contre, ils ne sont pas affichés en cours d'exécution d'un programme, ils ne sont pas reconnus pour les chemins d'accès à des fichiers. Comment faire ?
    mardi 11 mars 2008 10:38

Toutes les réponses

  • Es-ce que tu aurais un bout de code,  car de mon coté cela fonctionne bien et je n'ai jamais eu de tel problème.

     

    mardi 11 mars 2008 11:14
    Modérateur
  • Voici un bout de code. Au démarrage, je lis un fichier fa.cvs avec des ";" comme séparateurs, qui comporte  4 colonnes. Je place la 2° colonne dans une combobox FamilleListe réalisée en mode design  (sans modifier autre chose que la position et la dimension) et chaque colonne dans un tableau fa(). Mon fichier comporte des accents qui ne sont pas reproduits dans la liste (un petit carré). Pire, la 4°  colonne comprte des adresses d'images avec des accents, ça c'est une erreur, mais il y en a quelques milliers et changer de nom serait très long. Je veux afficher l'image correspondante quand on clique sur un élément de la liste de la combo. C'est la 2° sub, avec un code brut, pour essai. On obtient une erreur quand l'adresse comporte un caractère accentué. 

    <code>

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    Dim i As Integer

    Dim fa(1000) As String

    Dim famille As Microsoft.VisualBasic.FileIO.TextFieldParser

    famille = My.Computer.FileSystem.OpenTextFieldParser _

    ("C:\Reconnaitre les fleurs\donnee\fa.csv")

    famille.TextFieldType = Microsoft.VisualBasic.FileIO.FieldType.Delimited

    famille.Delimiters = New String() {";"}

    i = 0

    While Not famille.EndOfData

    Try

    currentRow = famille.ReadFields()

    Dim currentField As String

    For Each currentField In currentRow

    REM MsgBox(currentField)

    fa(i) = currentField

    If ((i Mod 4) = 1) Then

    FamilleListe.Items.Add(fa(i))

    REM MsgBox(currentField)

    End If

    i = i + 1

    Next

    Catch ex As Microsoft.VisualBasic.FileIO.MalformedLineException

    MsgBox("Line " & ex.Message & _

    "is not valid and will be skipped.")

    End Try

    End While

    End Sub

    Private Sub FamilleListe_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles FamilleListe.SelectedIndexChanged

    Dim i As Integer

    Dim a As String

    i = FamilleListe.SelectedIndex * 4 + 3

    MsgBox(fa(i))

    a = "C:\Reconnaitre les fleurs\imgselection\" + fa(i) + ".jpg"

    PictureBox1.ImageLocation = a

    PictureBox1.Load(a)

    PictureBox1.Show()

    End Sub

    </code>
    mardi 11 mars 2008 12:06
  • À quelle ligne l'erreur se produit-elle et quel est le message d'erreur?

    mardi 11 mars 2008 12:28
    Modérateur
  • Pour l'affichage, il n'y a pas de message d'erreur, tout simplement, la lettre accentuée est remplacée par un petit carré. Pour la recherche du fichier image, on ne le trouve pas, tout simplement, on obtient en debug Impossible de trouver le fichier 'C:\Reconnaitre les fleurs\imgselection\farosac�es.jpg'.. Mormal qu'on ne le trouve pas puisque le fichier est Impossible de trouver le fichier 'C:\Reconnaitre les fleurs\imgselection\farosacées.jpg' !

    mardi 11 mars 2008 12:47
  • Selon certains informations sur le web, il faut que tu changes ton Encoding pour le UTF8, voir les infos :

     

    http://msdn2.microsoft.com/fr-fr/library/system.text.encoding.aspx

    http://msdn2.microsoft.com/fr-fr/library/system.text.utf8encoding.aspx

     

    mardi 11 mars 2008 13:11
    Modérateur
  • Je suis passé par là. Le problème, c'est que je ne sais pas trop comment faire. Si je place

    Dim utf8 As New UTF8Encoding() dans mon code comme je vois dans l'exemple donné dans le 1° http ci-dessus, j'obtiens immédiatement une erreur (UTF8Encoding non défini). J'ai cherché dans l'index de l'aide ce qui pouvait correspondre à quelque chose qui ressemble à de l'encodage, mais sans succès. Merci tout de même.

    mardi 11 mars 2008 13:30
  • Remplace la ligne

     

    Code Snippet
    Dim famille As Microsoft.VisualBasic.FileIO.TextFieldParser

     

    par

     

    Code Snippet
    Dim famille As Microsoft.VisualBasic.FileIO.TextFieldParser("C:\Reconnaitre les fleurs\donnee\fa.csv",Encoding.UTF8)

     

    Et enlève la ligne :

     

    Code Snippet

    famille = My.Computer.FileSystem.OpenTextFieldParser _

    ("C:\Reconnaitre les fleurs\donnee\fa.csv")

     

    Si cela ne fonctionne pas, essaye le Unicode, voir si cela fonctionne.

     

     

     

    mardi 11 mars 2008 13:42
    Modérateur
  • J'ai dû m'absenter un moment. Désolé.

    voici comment j'ai réalisé la modif

    <code>

    Dim famille As Microsoft.VisualBasic.FileIO.TextFieldParser("C:\Reconnaitre les

    fleurs\donnee\fa.csv",Encoding.UTF8)

    'Dim famille As Microsoft.VisualBasic.FileIO.TextFieldParser

    'famille = My.Computer.FileSystem.OpenTextFieldParser _

    '("C:\Reconnaitre les fleurs\donnee\fa.csv")

    famille.TextFieldType = Microsoft.VisualBasic.FileIO.FieldType.Delimited

    famille.Delimiters = New String() {";"}

    i = 0

    While Not famille.EndOfData....

    </code>

    J'ai d'abord une erreur sur le chemin d'accès au fichier "C:\Reconnaitre les fleurs\donnee\fa.csv" (les tailles de tableaux ne peuvent pas figurer dans les spécificateurs de type)

    Ensuite, dans famille.TextFieldType, famille.Delimiters et tout ce qui est famille.quelquechose, on me dit que famille n'est pas défini. J'ai peut être fait une erreur.
    Je vais devoir arrêter ce soir, il est posible que je sois absent quelques jours. En tout cas, merci

    mardi 11 mars 2008 16:02
  • Voici le lien de l'erreur sur MSDN, je ne sais pas exactement comment le régler, mais je trouve cela bizarre. C'est sur que si tu as une erreur sur le constructeur, famille ne sera pas initialisé.

     

    mardi 11 mars 2008 18:24
    Modérateur