IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Lazarus Pascal Discussion :

[Windows] UTF8 et noms de fichiers [Lazarus]


Sujet :

Lazarus Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert

    Homme Profil pro
    au repos
    Inscrit en
    Février 2014
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : au repos

    Informations forums :
    Inscription : Février 2014
    Messages : 429
    Par défaut [Windows] UTF8 et noms de fichiers
    Bonjour à tous,

    Désolé de revenir sur un problème d'accents (Jipété va encore s'énerver ) , mais là c'est moi qui commence à m'énerver.

    Test fait sous Windows 7

    FileName est de type string

    1)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    FileName:= 'Texte à travailler.txt'; 
     
    StringList.Loadfromfile(FileName); // erreur : fichier non trouvé
    Je convertis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    StringList.LoadFromFile(UTF8ToSys(Filename)); // c'est Ok
    2)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FileName:= 'Image à travailler.bmp';
    Je convertis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Bitmap.LoadFromfile(UTF8ToSys(Filename)); // erreur : impossible d'ouvrir "Image ? travailler.bmp"
    Bitmap.Loadfromfile(FileName); // sans conversion, c'est Ok
    3) J'utilise un TBGRABitmap : là je suis obligé de convertir le nom de fichier.

    Donc, selon les composants utilisés, if faut convertir le jeu de caractères ou pas !!!
    Je ne sais pas ce que vous en pensez, moi j'appelle ça un sérieux manque de cohérence.

    Comment traitez-vous ce problème ? (ne me dites pas : en ne mettant pas d'accents dans les noms de fichiers pcq je ne peux pas interdire à un utilisateur de le faire.)

    Merci d'avance.

    Thierry

  2. #2
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 158
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 158
    Par défaut
    Yep !
    Citation Envoyé par ThWilliam Voir le message
    Bonjour à tous,

    Désolé de revenir sur un problème d'accents (Jipété va encore s'énerver ) , mais là c'est moi qui commence à m'énerver.

    Test fait sous Windows 7

    FileName est de type string (...)
    Jipété va pas pouvoir beaucoup t'aider sur ce coup-là, il est tout sous Linux et hop !

    Sinon, c'est vrai qu'il y a de quoi s'énerver grave quand on lit ce qu'on lit, parfois, à croire que personne n'est allé à l'école, ou n'en a rien retiré, ou je ne sais pas, c'est parfois une vraie bouillie ce qu'on peut lire...
    Et encore, sur un forum francophone, on peut + ou - comprendre, en déchiffrant/traduisant ; mais sur un forum anglophone, alors là...
    Parce que cette déculturisation est internationale, faut pas se voiler la face

    Bon, je note ça, quand même : FileName est de type string
    Mais sous 7, ça n'est pas du WideString ?
    Enfin, j'dis ça j'dis rien, puisque je ne peux pas tester. Mais jette un œil du côté de AnsiToUTF8, peut-être.

  3. #3
    Membre émérite
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    469
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 469
    Par défaut
    Bonjour

    Lazarus est cohérent, dans ce domaine, mais parfois on a du mal à comprendre ce qui se passe.

    S'il te dit :

    erreur : impossible d'ouvrir "Image ? travailler.bmp"
    C'est que le texte n'est pas en UTF8 puisque, sauf configurations exotiques, Lazarus est supposé afficher de l'UTF8.
    Par conséquent UTF8ToSys ne convertit pas correctement en ISO (SYS sous Windows) et il est normal que

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Bitmap.LoadFromfile(UTF8ToSys(Filename));
    ne fonctionne pas, et que sans conversion ce soit OK.

    Il y a presque certainement une erreur dans ton code qui fait que le nom de fichier est assigné ou converti en ISO à un moment.

    Pour déboguer, tu peux essayer d'utiliser la fonction GuessEncoding.

  4. #4
    Membre prolifique Avatar de Jon Shannow
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2011
    Messages
    4 759
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2011
    Messages : 4 759
    Par défaut
    Je crois que comme JIPETE l'a dit, c'est le type de la variable qui pose problème ! Il faut un WideString. Me demander pas pourquoi, mais c'est comme ça.

  5. #5
    Membre émérite
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    469
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 469
    Par défaut
    Je n'utilise que des String, aucune WideString et je n'ai jamais de problème avec l'encodage...

  6. #6
    Membre Expert

    Homme Profil pro
    au repos
    Inscrit en
    Février 2014
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : au repos

    Informations forums :
    Inscription : Février 2014
    Messages : 429
    Par défaut
    Merci à vous pour vos réponses.

    @tintinux :
    Je suis certain que mon nom de fichier est en UTF8 (je l'ai vérifié).
    Je viens de faire d'autres tests, notamment avec un TMemo, et là je dois bien convertir le nom de fichier.
    J'ai l'impression qu'avec le TBitmap.Loadfromfile, il s'attend à recevoir un nom de fichier UTF8 et fait lui-même la conversion, ce que ne font pas d'autres composants.
    Jusqu'à présent, je n'ai découvert que 2 composants avec lesquels il ne faut pas faire de conversion : TBitmap et TPicture. Par contre TLazintfimage nécessite la conversion.
    Je veux bien te croire quand tu dis que Lazarus est cohérent, mais...

    @Jipété, Jon Shannow :
    j'ai essayé tous les types de variables : ansistring, widestring, unicodestring... Sans résultat.
    j'ai essayé à peu près toutes les fonctions de codage et décodage de string... Sans résultat.

    Sur le web, c'est fou le nombre de pages concernant la gestion de l'UTF8 par rapport à l'OS.
    A mon avis, sous Linux, vous ne devez pas avoir ce genre de problèmes.
    Mais sous Windows !!!
    Un exemple : j'enregistre un TMemo, le texte enregistré est évidemment en UTF8.
    Résultat : MS NotePad sait le lire, MS WordPad ne le lit pas correctement, et j'en passe... OpenOffice a la "gentillesse" de me demander quel jeu de caractères j'utilise.
    Donc, dorénavant, je vais faire un UTF8Decode pour la sauvegarde, et un UTF8Encode pour ramener dans mon programme.

    Encore merci et bonne fin de journée.

    J'estime le problème comme résolu.

    Thierry

  7. #7
    Membre Expert

    Homme Profil pro
    au repos
    Inscrit en
    Février 2014
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : au repos

    Informations forums :
    Inscription : Février 2014
    Messages : 429
    Par défaut
    Une petite précision concernant Windows.
    Ce que je viens de trouver sur le web :
    Windows utilise le code UTF-16, mais a un codepage Ansi pour chaque langage supporté, unlike Unix and Linux where the language and encoding can be set independently.
    Et de fait, faire un UTF8ToSys ou un UTF8ToAnsi, cela revient au-même.
    MAIS, ce code page Ansi n'est pas utilisé par les programmes Unicode (dont Wordpad) !

    Foutu Windows

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Probléme pour récuperer le nom du Fichier API Windows
    Par thanks33 dans le forum Débuter
    Réponses: 22
    Dernier message: 28/03/2013, 16h18
  2. Récupération d'un nom de fichier ouvert sous windows
    Par julien19 dans le forum Langage
    Réponses: 2
    Dernier message: 16/02/2010, 17h08
  3. [VB.net 2005] Nom de fichier Windows depuis un nom dos
    Par ricil78 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 09/08/2007, 09h32
  4. Réponses: 7
    Dernier message: 06/08/2007, 14h34
  5. Réponses: 9
    Dernier message: 06/03/2007, 10h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo