Aller au contenu

Programmer autolisp pour UTF-8


Messages recommandés

Posté(e)

Bonjour à tous et encore bravo pour toutes vos réponses qui nous aident beaucoup.

 

Pourriez-vous m'aider à finaliser une application qui doit me permettre d'écrire un fichier au format GML.

Je n'ai aucun problème pour programmer en autolisp, la création de ce fichier mais là où je sèche, c'est au niveau des caractères accentués. Il faudrait que mon fichier soit encodé en UTF-8.

Comment faut-il faire en autolisp ou vlisp pour encoder un fichier écrit en ANSI?

Merci d'avance pour l'aide que vous pourriez m'apporter.

Posté(e)

Salut,

 

Tu peux essayer ces routines:

 

;; gc:WriteStream
;; Ecrit un texte dans un fichier suivant l'encodage de caractère spécifié
;; Retourne le chemin du fichier ou nil si l'opération a échoué.
;;
;; Arguments
;; text     : le texte à écrire
;; filename : le chemin du ficher
;; charset  : le système d'encodage (exemples : "iso-8859-1" (ascii/ANSI), "utf-8", "unicode")
(defun gc:WriteStream (text filename charset / stream result)
 (vl-load-com)
 (if (setq stream (vlax-create-object "ADODB.Stream"))
   (progn
     (setq result
     (vl-catch-all-apply
       (function
	 (lambda ()
	   (vlax-put stream 'Charset charset)
	   (vlax-invoke stream 'Open)
	   (vlax-invoke stream 'WriteText text 0)
	   (vlax-invoke stream 'SaveToFile filename 2)
	   (vlax-invoke stream 'Close)
	 )
       )
     )
     )
     (vlax-release-object stream)
     (if (not (vl-catch-all-error-p result))
filename
     )
   )
 )
)

;; gc:ReadStream
;; Lit un texte dans un fichier suivant l'encodage de caractère spécifié
;; Retourne le contenu du fichier ou nil si l'opération a échoué.
;;
;; Arguments
;; filename : le chemin du ficher
;; charset  : le système d'encodage (exemples : "iso-8859-1" (ascii/ANSI), "utf-8", "unicode")
(defun gc:ReadStream (filename charset / stream retval)
 (vl-load-com)
 (if (and (setq filename (findfile filename))
   (setq stream (vlax-create-object "ADODB.Stream"))
     )
   (progn
     (vl-catch-all-apply
(function
  (lambda ()
    (vlax-put stream 'Charset charset)
    (vlax-invoke stream 'Open)
    (vlax-invoke stream 'LoadFromFile filename)
    (setq retval (vlax-invoke stream 'ReadText -1))
    (vlax-invoke stream 'Close)
  )
)
     )
     (vlax-release-object stream)
     retval
   )
 )
)

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

  • 2 ans après...
Posté(e)

Salut,

 

Il ne s'agit pas de commandes, mais de fonctions LISP définies avec (defun ...) qui sont à utiliser comme les fonctions LISP natives.

Ces fonctions requièrent des arguments comme décrit dans les commentaires de l'en-tête.

 

Exemple d'utilisation :

 

Ecrire "En-tête à lire méticuleusement" dans un fichier avec l'encodage UTF-8

(gc:WriteStream "En-tête à lire méticuleusement" "C:\\Temp\\Test.txt" "utf-8")

 

Lire le fichier en utilisant l'encodage unicode

(gc:ReadStream "C:\\Temp\\Test.txt" "unicode")

retourne "??????????????????"

 

Lire le fichier en utilisant l'encodage ascii/ANSI

(gc:ReadStream "C:\\Temp\\Test.txt" "iso-8859-1")

retourne "En-tête à lire méticuleusement"

 

Lire le fichier en utilisant l'encodage UTF-8

(gc:ReadStream "C:\\Temp\\Test.txt" "utf-8")

retourne "En-tête à lire méticuleusement"

 

AutoLISP utilise l'encodage ascii/ANSI

((lambda (file / line)
  (setq line (read-line file))
  (close file)
  line
)
 (open "C:\\Temp\\Test.txt" "r")
)

retourne "En-tête à lire méticuleusement"

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

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 compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité