Probleme d'affichage des accents dans une listbox

bonjour,

Je saisis dans une cellule d’une listbox la phrase “Dpose et rcupration des quipements en fin de travaux.”
Je l’enregistre dans un fichier texte tout simple. Je l’ouvre avec Notepad++. Je retrouve bien le mme 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 mme problme.

Quelqu’un a -t-il un ide ?

Merci
Vincent

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

Pour sauvegarder :

[code]Dim FichierPref as FolderItem
Dim Stream as TextOutputStream
Dim StreamText as String

StreamText = “je v bien dns mon ban :slight_smile: .”

Stream = TextOutputStream.Create(FichierPref)
Stream.Write ConvertEncoding(StreamText, DefAppEncod)
Stream.Close
[/code]
FichierPref doit avoir un Path du style “MonDisque:MonDossier:MonSousDossier:MonFichier.txt”. “MonFichier.txt” n’existe pas forcment (si oui il sera cras) mais le dossier “MonSousDossier” lui doit exister.

Pour lire :

[code]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
[/code]

Dans l’event Open de App ou de ma fentre principale je mets :

DefAppEncod = Encodings.UTF8 ou autre.
Tu peux crire directement l’encodage mais moi je me cre 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.

Bonsoir et merci Thomas,

En fait aprs analyse des traitements, le problme se produit lorsque mon enregistrement fait plus de 117 caractres.
En dessous, les accents apparaissent bien et au dela, il y a le problme.
Je ne comprend pas pourquoi 117, ca serait 127 ou 255, cela pourrait avoir eventuellement une explication mais 117, je sche.
Il n’y a que le problme 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 ?

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:

[code]Dim Texte_Accents As String

Texte_Accents = “Mon joli texte accentué: éèàçùãñõ”

Listbox1.AddRow Texte_Accents[/code]

?

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. :wink:

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://documentation.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

Je ne suis pas decant mon ordi pour vrifier mais je pense que j’enregistre des fichiers texte de plus de 117 caractres, 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 118me caractre ne serait pas un caractre 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 problme, 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 renregistres pas !?

[quote=359717:@Thomas ROBISSON]Michel, tu fais t.close uniquement en cas d’erreur Catch ? Et si pas de problème, pas de t.close ?
[/quote]

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

Je pense que tu as des problemes d’encodage.
Cela me prends souvent beaucoup de temps a trouver le bon reglage !

Ce que j’utilise le + c’est:
v_cell= DefineEncoding ( v_cell , Encodings.UTF8 )
pour l’ecriture et lecture ainsi que pour des enregistrements de BDD

Il te faut etre coherent dans les 2 sens
Enfin pour avoir le bon encodage, il te faut savoir l’encodage de ton Notepad++

A priori, aucun besoin de faire quoi que ce soit la sauvegarde. Xojo utilise systmatiquement l’encodage UTF8 pour les chaines de caractres.

A chargement, il suffit de dire quel encodage a t utilis avec DefineEncoding et Encodings.UTF8. Ce qui peut d’ailleurs se spcifier dans TextInputStream.

Noter que cela est aussi ncessaire lorsqu’on utilise une base de donnes, encodebase64 ou un memoryBlock. C’est relativement simple.

Autant que je sache, Si c’est un document venant de Windows Text, c’est gnralement du CP1252, Encodings.WindowsANSI.

J’ai rapport l’erreur dans le code example de TextInputStream. Paul Lefebvre devrait corriger cela rapidement.
<https://xojo.com/issue/50506>