Probleme d'affichage des accents dans une listbox

  1. 3 days ago

    bonjour,

    Je saisis dans une cellule d'une listbox la phrase "Dépose et récupération des équipements en fin de travaux."
    Je l'enregistre dans un fichier texte tout simple. Je l'ouvre avec Notepad++. Je retrouve bien le même texte.

    Je relis le fichier texte, j'affiche ma variable qui contient l'enregistrement dans msgbox, j'ai bien mes accents.
    je fais listbox.cell(row,col) = ma_variable et j'obtiens à l'écran "Dépose et récupération des équiments"
    Si je met ma variable dans un textfield, j'ai bien mes accents !

    J'ai essayé tous les options d'encodings, de convert, ... rien n'y fait. Toujours le même problème.

    Quelqu'un a -t-il un idée ?

    Merci
    Vincent

  2. Thomas R

    Nov 14 Europe, France, Besancon
    Edited 3 days ago

    J'écris et je sauve des fichiers texte sans soucis, que je les recopie dans une listbox ou autre.
    Il te faut spécifier l'encodage lorsque tu enregistres et lorsque tu lis. Je vais chercher des exemples et je reviens.

    Pour sauvegarder :

    Dim FichierPref as FolderItem
    Dim Stream as TextOutputStream
    Dim StreamText as String
    
    StreamText = "je vé bien dàns mon baîn :-) ."
    
    Stream = TextOutputStream.Create(FichierPref)
    Stream.Write ConvertEncoding(StreamText, DefAppEncod)
    Stream.Close

    FichierPref doit avoir un Path du style "MonDisque:MonDossier:MonSousDossier:MonFichier.txt". "MonFichier.txt" n'existe pas forcément (si oui il sera écrasé) mais le dossier "MonSousDossier" lui doit exister.

    Pour lire :

    Dim FichierPref as FolderItem
    Dim Stream as TextInputStream
    Dim MonTexte as String
    
    If (not(FichierPref = Nil)) and FichierPref.Exists Then
      Stream = TextInputStream.Open(FichierPref)
      Stream.Encoding = DefAppEncod
      
      MonText = Stream.ReadAll
      Stream.Close
    End If

    Dans l'event Open de App ou de ma fenêtre principale je mets :
    DefAppEncod = Encodings.UTF8 ou autre.
    Tu peux écrire directement l'encodage mais moi je me crée une variable comme ça si un jour je change, je ne me gourerai pas en changeant quand j'écrie et pas quand je lis ou l'inverse.

  3. 2 days ago

    Bonsoir et merci Thomas,

    En fait après analyse des traitements, le problème se produit lorsque mon enregistrement fait plus de 117 caractères.
    En dessous, les accents apparaissent bien et au dela, il y a le problème.
    Je ne comprend pas pourquoi 117, ca serait 127 ou 255, cela pourrait avoir eventuellement une explication mais 117, je sèche.
    Il n'y a que le problème des accents, les autres traitements sur cette chaine fonctionnent.

    Je vais essayer de faire des tests en coupant mes enregistrements en 2.

    Existe-il un bug sur ce sujet ?

  4. yesterday

    Emile S

    yesterday Europe (France, Strasbourg)

    As-tu…
    vidé le dossier Xojo cache ?
    Quitté toutes les applications, éteind, redémarré Xojo ?

    As-tu - après avoir effectué un démarrage (à froid, plusieurs minutes après avoir éteint l’ordinateur) et lancé seulement Xojo (WiFi éteint) - créé un nouveau projet qui ne contient qu’un Listbox et qui affiche ton texte accentué que tu auras été copié dans une variable tel que:

    Dim Texte_Accents As String
    
    Texte_Accents = "Mon joli texte accentué: éèàçùãñõ"
    
    Listbox1.AddRow Texte_Accents

    ?

    As-tu essayé d’enlever un caractère accentué (remplacé par un caractère ASCII - non accentué), l’un après l’autre pour essayer de déterminer quel est le caractère accentué fautif ?
    (remplacer tous les é par un e, les è par un e, les à par un a, etc.)

    Oui, je sais, cela fait un peu bébète, mais cela a le mérite de trouver ce qui ne va pas. ;-)

  5. Michel B

    yesterday Pre-Release Testers, Xojo Pro

    Comment lisez-vous le fichier texte dans votre application ?

    Lors de la lecture à partir du fichier, il devrait suffire de dire à l'application quel encoding est utilisé.

    Voir l'exemple de TexIntputStream à http://docs.xojo.com/index.php/TextInputStream

    Dim f As FolderItem = GetOpenFolderItem("text") // as defined in File Type Sets Editor
    If f <> Nil Then
      If f.Exists Then
        // Be aware that TextInputStream.Open could raise an exception
        Dim t As TextInputStream
        Try
          t = TextInputStream.Open(f)
          t.Encoding = Encodings.UTF8 // <=== C'est là que ça se passe
          TextArea1.Text = t.ReadAll
        Catch e As IOException
          t.Close
          MsgBox("Error accessing file.")
        End Try
      End If
    End If
  6. Thomas R

    yesterday Europe, France, Besancon
    Edited yesterday

    Je ne suis pas decant mon ordi pour vérifier mais je pense que j'enregistre des fichiers texte de plus de 117 caractères, et sans soucis.
    Je viens de remonter en haut de ce fil et je n'ai pas vu en quel encodage tu enregistres et relis ? Ton 118ème caractère ne serait pas un caractère qui fout le bazar ?
    Tu as essayé UTF8 ? Je fais tout dans ce format personnellement.

    Michel, tu fais t.close uniquement en cas d'erreur Catch ? Et si pas de problème, pas de t.close ?


    Mais au fait Vincent, tu écris "j'ouvre mon fichier texte dans mon NotePad+", mais tu ne fais que l'ouvrir hein, tu ne le réenregistres pas !?

  7. Michel B

    yesterday Pre-Release Testers, Xojo Pro

    @Thomas R Michel, tu fais t.close uniquement en cas d'erreur Catch ? Et si pas de problème, pas de t.close ?

    J'ai simplement copié l'exemple du LR. En effet, t.close devrait être après t.readall.

or Sign Up to reply!