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 :

Longueur de chaîne erronée si majuscule accentuée [Lazarus]


Sujet :

Lazarus Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 117
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 117
    Par défaut Longueur de chaîne erronée si majuscule accentuée
    Bonjour,

    si je tape A dans un Edit1, le test IntToStr(Length(Edit1.Text)); me retourne 1.

    Et si je tape <CTRL><MAJ>u00c0<ESPACE> pour faire afficher À, le test me retourne 2.

    Vous voyez 2 caractères, vous ?

    Env. : Laz 1.0.10, FPC 2.6.2, Debian Wheezy 32 bits.
    Quelqu'un pourrait tester avec une 1.0.12 et/ou FPC 2.7 et/ou 64 bits ?

    Merci pour vos retours de tests, pour vos idées, et bon week-end,

    EDIT : et y a plus grave ! Le code pour les trois points de suspension (qui compte pour 1 seul caractère, en typographie : …), me retourne 3.
    Vous pouvez tester avec <CTRL><MAJ>u2026<ESPACE>

    Par ailleurs, un test en console sous Bash fonctionne bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #!/bin/bash
    tst=$1
    echo $tst
    echo ${#tst}
    D'autant plus curieux qu'un code en C retourne les mêmes erreurs que Lazarus :
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    #include <stdio.h>
    #include <string.h>
     
    int main(int argc, char **argv)
    {
    	int arg;
    	for (arg = 0; arg < argc; arg++) {
    		if (argv[arg] [0] == '-')
    			printf("option : %s\n", argv[arg] + 1);
    		else	
    			printf("argument %d: %s\n", arg, argv[arg]);
    			printf("longueur : %d\n", strlen(argv[arg]));
    		}
    	return 0;
    }
    Sorties :
    # ./testarg 'À'
    argument 0: ./testarg
    longueur : 9
    argument 1: À
    longueur : 2
    # ./testarg '…'
    argument 0: ./testarg
    longueur : 9
    argument 1: …
    longueur : 3
    # ./testarg '•'
    argument 0: ./testarg
    longueur : 9
    argument 1: •
    longueur : 3
    # ./testarg 'A'
    argument 0: ./testarg
    longueur : 9
    argument 1: A
    longueur : 1

  2. #2
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mai 2003
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 33
    Par défaut
    Lazarus est Unicode, ajoute l'unité lazutf8 dans uses et teste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IntToStr(UTF8Length(Edit1.Text));

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 117
    Par défaut
    Yep !

    L'homme qui me sauve la vie, euh, le code
    Citation Envoyé par SoftChris Voir le message
    (...) ajoute l'unité lazutf8 dans uses
    Même pas besoin.


    Citation Envoyé par SoftChris Voir le message
    IntToStr(UTF8Length(Edit1.Text));

  4. #4
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mai 2003
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 33
    Par défaut
    Si faut ajouter l'unité lazutf8, explication tiré du WikiFreePascal :

    Pour exécuter des opérations sur des chaines UTF-8, il est préférable d'utiliser les routines de l'unité lazutf8 plutôt que celles de SysUtils de Free Pascal, car SysUtils n'est pas encore prêt à travailler avec Unicode, alors que lazutf8 l'est. Substituez simplement les routines de SysUtils avec leur équivalent lazutf8, qui ont toujours le même nom exception faite du préfixe "UTF8" ajouté.
    voir : http://wiki.freepascal.org/LCL_Unicode_Support/fr

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 117
    Par défaut
    Citation Envoyé par SoftChris Voir le message
    Si faut ajouter l'unité lazutf8, explication tiré du WikiFreePascal (...)
    OK, unité ajoutée, mais je n'ai pas noté de changement (puisque ça fonctionnait sans ajout).

    Merci pour le coup de main, et le lien vers l'article (assez indigeste, faut bien le reconnaître )

  6. #6
    Membre émérite

    Homme Profil pro
    Rédacteur technique (retraité)
    Inscrit en
    Octobre 2009
    Messages
    168
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Rédacteur technique (retraité)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 168
    Par défaut Routines UTF8
    OK, unité ajoutée, mais je n'ai pas noté de changement (puisque ça fonctionnait sans ajout).
    Mais tu a peut-être LCLProc dans ta clause Uses.

    En effet jusqu'à Lazarus 0.9.30 les routines UTF8 étaient dans cette unité. Maintenant elles sont dans lazutf8 mais ont aussi été maintenues, pour la compatibilité ascendante, dans LCLProc avec le status 'Deprecated'.

    Par conséquent ça marche avec l'une ou l'autre de ces deux unités mais il préférable d'utiliser lazutf8.

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

Discussions similaires

  1. [EXCEL] Majuscules accentuées
    Par larnicebafteur dans le forum Excel
    Réponses: 9
    Dernier message: 18/05/2009, 15h56
  2. [Système] Majuscules accentuées / strtoupper()
    Par rystio dans le forum Langage
    Réponses: 4
    Dernier message: 04/12/2006, 17h00
  3. Réponses: 7
    Dernier message: 23/10/2006, 20h26
  4. J'ai trouvé l'origine du problème des majuscules accentuées sous FF!
    Par Médinoc dans le forum Evolutions du club
    Réponses: 14
    Dernier message: 28/07/2006, 16h13
  5. [SELECT] recherche de majuscules accentuées
    Par Huntress dans le forum Langage SQL
    Réponses: 17
    Dernier message: 11/09/2005, 16h39

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