OK Thierry mais un "simple fichier texte" peut être en ANSI (probablement la page de code "Europe de l'Ouest" qu'on utilise en grande majorité ici) ou en Unicode. Perso, j'ai des tonnes de fichiers que je dois maintenir en Unicode car contenant du texte en hébreu, en viêtnamien, en Indi, etc.
Si notre posteur maintient un dico en allemand, il n'est pas complètement impossible qu'il doive gérer la dernière nouveauté Unicode : le eszet majuscule (que je trouve être une abération linguistique mais je ne suis pas spécialiste) ou d'autres points de code du bas allemand du 13ème siècle, pourquoi pas.
Ce point est peu important toutefois : s'il lit son "fichier de fichiers" sous le bon mode, il chargera ça correctement en mémoire, car les chaînes AutoIt supporteront ces représentations.
Maintenant la question se pose au niveau FTP : si son serveur ne déclare pas correctement qu'il supporte UTF-8 (et pas mal de serveurs sont mal configurés de ce point de vue), la récupération des répertoires et fichiers distants va découillonner. Je viens de vérifier FTPex.au3 et (ouf !) on y emploie bien des fonctions Unicode (fonction
W). Seul hiatus : si le serveur est en ANSI (je doute un peu) et ne transforme pas en UTF-8.
Le contenu est autre chose : transfert en binaire, mode passif et ça doit fonctionner partout (ou presque !).
Si on a un Mac en face, le problème n'est pas forcément trivial (cf.:
ce vieux fil).
En dernier lieu, la fonction à employer pour convertir une chaîne AutoIt native en UTF-8 est __UTF16toUTF8 ci-dessous (ou un équivalent) :
► Afficher le texte
Code : Tout sélectionner
#include <String.au3>
ConsoleWrite(StringToBinary("€Test-ВΈТΑ₁.txt", 4) & @LF) ; pour info
ConsoleWrite(__UTF16toUTF8("€Test-ВΈТΑ₁.txt") & @LF) ; s'affiche correctement si vous avez mis votre console Scite en 65001
MsgBox(0, '', __UTF16toUTF8("€Test-ВΈТΑ₁.txt")) ; la chaîne en UTF-8
MsgBox(0, '', __UTF8toUTF16(__UTF16toUTF8("€Test-ВΈТΑ₁.txt"))) ; NOP
Func __UTF16toUTF8($sUTF16)
Return(BinaryToString(StringToBinary($sUTF16, 4)))
EndFunc
Func __UTF8toUTF16($sUTF16)
Return(BinaryToString(StringToBinary($sUTF16), 4))
EndFunc
Ne pas croire ce qu'on croit y voir : les ВΈТΑ là-dedans sont 4 caractères bien distincts des 5 caractères ASCII B'ETA, leur encodage le montre !
Bon lien sur un survol des problèmes de jeux de caractères, bien que la diversité des intervenants brouille un peu le tableau. J'ai aussi pondu quelques "murs de texte" dans des discussions similaires (comment détecter l'encodage d'un fichier texte) sur le forum US. Stricto sensu, il n'y a
aucune solution qui soit à l'abri d'erreurs d'interprétation dans le cas général, ni hier, ni aujourd'hui, ni demain.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.