Bonjour,
Voici mon problème :
Je veux lire du Grec à partir d'un fichier UTF-8.
Le fichier est composé ainsi :
La première ligne donne le nom du langage qui va être décrit dans le fichier.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 Langage -1 1 Mon texte 2 Mon texte ...
La seconde ligne donne l'entier qui sert à la fonction ChangeAlphabet pour afficher correctement les caractères en mode ANSI (ce qui me permet de ne pas avoir à mettre tous mes champs en Unicode).
Puis dans une boucle je remplis un tableau associatif tout simplement comme ceci :
TableauTraduction[1]=Mon texte
Je veux afficher cela à l'écran à la fin.
Sans UTF-8, ça se passe très bien, mais pour des raisons pratiques, notament de transfert de fichier de traduction par email, je me dois de le mettre en UTF-8 pour simplifier les échanges et pour que je puisse ouvrir le fichier et voir le contenu sans passer par mon application.
Le problème est que je dois lire ce fichier par mon application WinDev, et ça, ça ne marche pas.
J'ai beau ouvrir mon fichier avec :
fOuvre("Language_GR.txt",foLecture+foUnicode)
Les chaines retournées par fLitLigne ne sont pas des chaines Unicode
Je dis cela car si j'essaye de faire
chaineNonUTF8 = UnicodeVersAnsi(fLitLigne(nFichier))
J'ai le droit à une erreur "Un élément de type chaîne ne peut pas être converti vers le type chaîne UNICODE."
Bref, la conversion de la chaine renvoyée par fLitLigne échoue car elle ne semble pas être du bon type.
Pourtant UTF-8 c'est bien du Unicode, non?
Si j'essaye avec UTF8VersChaîne cela ne bug pas (pourquoi? la chaine chaineNonUTF8 n'est pas Unicode et aucun cas n'est effectué donc cela devrait bugger comme l'autre fonction) mais cela me donne une valeur qui n'a rien à voir.
Par exemple j'obtiens "4" alors que ma première ligne du fichier contient "Greek".
Bien entendu le fichier est correctement enregistré en UTF-8 car quand je tente de l'ouvrir Windows (7) me demande dans quel encodage je veux le voir et il me propose automatiquement UTF-8 qui est le bon mode d'encodage car je vois les bons caractères.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 ResOuverture est un entier = fOuvre(ComplèteRep(fRepExe())+"Language_"+gbTraduction_Langue+".txt",foLecture) Ligne = UTF8VersChaîne(fLitLigne(ResOuverture)) SI Ligne=EOT ALORS RETOUR //En mode débug Ligne n'a aucun rapport avec la valeur réelle
De plus si j'essaye une ouverture "simple" du fichier (sans le +foUnicode) cela me met des caractères bizarres un peu partout (mais ça c'est normal vu que le fichier est encodé différemment).
Quelqu'un aurait une idée? Est-ce que j'ai mal compris quelque chose?
Au pire je garde tout Ansi mais c'est chiant car je vais à chaque fois devoir passer par mes utilitaires pour manipuler les fichiers (car dans le cas contraire sinon on ne voit pas correctement les caractères).
Et dans le futur je souhaiterai utiliser ces fichiers au niveau du web donc UTF-8 est vraiment la solution standardisée à ce niveau là.
À bientôt,
Micaël
Partager