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

  1. #1
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 729
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 729
    Points : 15 132
    Points
    15 132
    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
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

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

    Informations forums :
    Inscription : Mai 2003
    Messages : 33
    Points : 100
    Points
    100
    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 éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 729
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 729
    Points : 15 132
    Points
    15 132
    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));
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

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

    Informations forums :
    Inscription : Mai 2003
    Messages : 33
    Points : 100
    Points
    100
    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 éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 729
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 729
    Points : 15 132
    Points
    15 132
    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 )
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  6. #6
    Membre éclairé

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

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

    Informations forums :
    Inscription : Octobre 2009
    Messages : 168
    Points : 807
    Points
    807
    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