Fraid Posté(e) le 15 février 2021 Posté(e) le 15 février 2021 Bonjour, Encore une question sur l'UTF8 ...Je sait bien que ce n'est pas passionnant,Mais si il y a bien une chose qui exaspère les programmeurs, c'est bien l'encodage de caractères.Et notamment celui là. (gile) est venu à notre secours grâce à ces fonctions de lecture et écriture en UTF8 (avec BOM).gc:WriteStream et gc:ReadStreamMais si on ne sait pas d'avance l'encodage d'un fichier, on fait comment?J'ai essayé en écrivant cette fonction toute simple en recherchant le BOM et/ou un caractére spécial lu en ANSI ;;;isUTF8 ;;;Détermine si un fichier est encodé en UTF8 ;;;Argument : nom du fichier ou chemin complet ;;;Retour T si UTF8 sinon nil (pour ANSI ou UTF8 sans BOM ni caractère spécial.) (defun isUTF8 (file / rid line ret) (and (setq file (findfile file)) (setq rid (open file "r")) (or (if (wcmatch (setq line (read-line rid)) "*,*Ã*")(setq ret T));BOM ou caractère spécial (while (and (setq line (read-line rid))(null ret)) (if (wcmatch line "*Ã*")(setq ret T)) ) ) ) (if rid (close rid)) ret ) Mais si le fichier ne contient pas de caractère spécial, ni de BOM (caractère invisible placé au début)il me semble impossible de discerner l'ANSI de L'UTF8. Si quelqu'un à une solution ...Merci https://github.com/Fraiddd
Fraid Posté(e) le 27 février 2021 Auteur Posté(e) le 27 février 2021 Bonjour, En continuant mes recherches, j'ai trouvé une solution pour enlever le BOMqui peut créer des bugs. ;;;utf8noBOM ;;;Supprime le BOM d'un fichier encodé en UTF8 avec BOM ;;;Arg: String Nom du fichier ou chemin complet ;;;Retour: T ou nil ;;;Doc https://stackoverflow.com/questions/31435662/vba-save-a-file-with-utf-8-without-bom ;;; https://www.w3schools.com/asp/ado_ref_stream.asp (defun utf8noBOM (file / rid wri) (and (setq file (findfile file)) (not (vl-catch-all-error-p (vl-catch-all-apply ;Test d'erreur (function (lambda () ;Fonction anonyme permetant le test d'erreur (setq rid (vlax-create-object "ADODB.Stream");Création des flux d'octects (Stream) wri (vlax-create-object "ADODB.Stream") ) (vlax-put rid 'Charset "utf-8");Lecture du fichier (vlax-invoke rid 'Open) (vlax-invoke rid 'LoadFromFile file) (vlax-put rid 'Position 3);On positionne la lecture sur le 4ém caractère (vlax-put wri 'Type 1);Données Binaires (vlax-invoke wri 'Open) (vlax-invoke rid 'CopyTo wri);Copie du flux vers l'autre (vlax-invoke rid 'Close) (vlax-invoke wri 'SaveToFile file 2) (vlax-invoke wri 'Close) (vlax-release-object rid) (vlax-release-object wri) );lambda );function ));catch );not );and ) https://github.com/Fraiddd
Eric Posté(e) le 28 février 2021 Posté(e) le 28 février 2021 Bonjour Fraid, J'ai été confronté, il n'y a pas longtemps au même problème. J'ai créé une petite application qui vérifie si un fichier txt ou scr est encodé en UTF8 et si c'est le cas l'appli créer une copie de ce fichier et le converti en AINSI. Le problème, c'est que si le fichier ne contient aucun caractère spécial, le fichier semble être en standard reconnu comme un fichier encodé en UTF 8. On peut faire un exemple tout simple. On ouvre le bloc note de Windows ou un éditeur de texte de type Notepad++, on écrit, au hasard, "eric" sans accent, on enregistre le fichier en choisissant l'encodage AINSI. On ferme le fichier. On ouvre le fichier, l'encodage affiché est UTF 8. On fait un autre exemple, on écrit cette fois, toujours au hasard, "éric" avec accent, on enregistre le fichier en choisissant l'encodage AINSI. On ferme le fichier. On ouvre le fichier, l'encodage affiché est AINSI.Donc, s'il n'y a pas un caractère spécifique, ça semble compliqué de savoir si c'est de l'ANSI, du moins c'est ce que j'en ai déduit. Eric est formateur, revendeur sur AutoCAD LT, DraftSight, ZWCAD, SketchUp et PDF2CAD
Fraid Posté(e) le 28 février 2021 Auteur Posté(e) le 28 février 2021 Bonjour, Je vois que nous arrivons devant la même porte fermée.Mais je n'ai pas encore renoncé.Car si on ajoute un caractère spécial à ce fichier, sans modifié son encodage, c'est gagné. https://github.com/Fraiddd
Messages recommandés
Créer un compte ou se connecter pour commenter
Vous devez être membre afin de pouvoir déposer un commentaire
Créer un compte
Créez un compte sur notre communauté. C’est facile !
Créer un nouveau compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant