Précédent   Forum des professionnels en informatique > Autres langages > Pascal > Lazarus
Lazarus Forum d'entraide sur Lazarus, l'EDI RAD multiplateforme basé sur Free Pascal
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 01/12/2011, 18h05   #1
Nouveau Membre du Club
 
Inscription : mars 2006
Messages : 117
Détails du profil
Informations personnelles :
Localisation : France, Nord (Nord Pas de Calais)

Informations forums :
Inscription : mars 2006
Messages : 117
Points : 33
Points : 33
Par défaut [Mac OS X] Problèmes avec les caractères accentués dans les contrôles et les messages

EDIT : J'ai modifié le titre puisque finalement, le problème vient d'un souci d'encodage et n'a rien à voir avec AnsiReplaceStr.

Bonjour,

J'ai un comportement totalement incompréhensible, ou quelque chose m'échappe complètement :

Si je fais :
Code :
1
2
3
4
5
6
7
 
var vc_paramstr : AnsiString;
begin
    vc_paramstr := 'bla bla bla'; 
    vc_paramstr := AnsiReplaceStr(vc_paramstr, 'a', 'é');
    application.MessageBox(Pchar(vc_paramstr), '', 0);  
end;
Tout va bien, normal et le programme m'affiche : "blé blé blé"

Si je fais :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
var vc_paramstr : AnsiString;
 
function CharSpe(var pi_str: Ansistring) : boolean;
begin
    pi_str := strutils.AnsiReplaceStr(pi_str, 'a', 'é');
    result := true;    
end;
 
begin
    vc_paramstr := 'bla bla bla'; 
    CharSpe(vc_paramstr);
    application.MessageBox(Pchar(vc_paramstr), '', 0);  
end;
Dans ce cas, ma chaine vc_paramstr semble vide et le message qui s'affiche est vide.

Même problème si je tente de remplacer le "a" de "bla bla bla" par n'importe quel caractère accentué.

Enfin, si je remplace par un autre caractère qu'un caractère accentué, plus de souci:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
var vc_paramstr : AnsiString;
 
function CharSpe(var pi_str: Ansistring) : boolean;
begin
    pi_str := strutils.AnsiReplaceStr(pi_str, 'a', 'e');
    result := true;    
end;
 
begin
    vc_paramstr := 'bla bla bla'; 
    CharSpe(vc_paramstr);
    application.MessageBox(Pchar(vc_paramstr), '', 0);  
end;
m'affiche le message "ble ble ble"

Tout se passe comme si le passage par la fonction plaçait un caractère de fin de chaîne au début de ma variable, si bien que le Pchar(vc_paramstr) est effectivement une chaine vide.

A noter : J'ai aussi essayé ceci :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
var vc_paramstr : AnsiString;
 
function CharSpe(const pi_str: Ansistring) : AnsiString;
begin
    result := strutils.AnsiReplaceStr(pi_str, 'a', 'é');    
end;
 
begin
    vc_paramstr := 'bla bla bla'; 
    vc_paramstr := CharSpe(vc_paramstr);
    application.MessageBox(Pchar(vc_paramstr), '', 0);  
end;
Même résultat.

Plateforme de dev : Mac OS X.

Je dois passer à côté de quelque chose de si énorme que je ne le vois pas. Help ....

Merci d'avance
sinfoni est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2011, 19h00   #2
Membre chevronné
 
Philippe
Inscription : avril 2002
Messages : 452
Détails du profil
Informations personnelles :
Nom : Philippe
Localisation : France

Informations forums :
Inscription : avril 2002
Messages : 452
Points : 683
Points : 683
Envoyer un message via ICQ à Ph. B.
Bonjour,
Je n'ai pas ce défaut sous windows.
As tu regardé le code source de ces fonctions ? ou essayé de tracer l'appel dans le cas où le résultat est incorrect ?
--
Philippe.
Ph. B. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/12/2011, 10h25   #3
Nouveau Membre du Club
 
Inscription : mars 2006
Messages : 117
Détails du profil
Informations personnelles :
Localisation : France, Nord (Nord Pas de Calais)

Informations forums :
Inscription : mars 2006
Messages : 117
Points : 33
Points : 33
Bonjour Philippe,

En fait, je pense que le souci provient d'une histoire d'unicode et d'UTF8.
Quand je trace, dès que je place un caractère accentué dans ma chaîne, le debugger me l'affiche vide. Si j'utilise AnsiToUTF8, le caractère est remplacé par un "?". Mais je ne vois toujours pas de solution. Peut-être faut-il que je change l'encodage du fichier source lui-même ? Encore qu'en remplaçant les caractères accentués par le chr(n) correspondant dans le source, j'ai le même souci...

Toute idée sera la bien venue...
sinfoni est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/12/2011, 12h08   #4
Nouveau Membre du Club
 
Inscription : mars 2006
Messages : 117
Détails du profil
Informations personnelles :
Localisation : France, Nord (Nord Pas de Calais)

Informations forums :
Inscription : mars 2006
Messages : 117
Points : 33
Points : 33
Point sur la situation : Les chaînes dans lesquels je souhaite insérer des caractères accentués sont destinées à des contrôles (boutons, memos etc.)

J'ai trouvé une multitude de choses sur le net concernant Lazarus et l'UTF8. Exemple : http://wiki.lazarus.freepascal.org/LCL_Unicode_Support. Certains disent d'utiliser UTF8Encode ou UTF8Decode, d'autres AnsiToUTF8 et UTF8ToAnsi + l'unité cwstring, d'autres encore SysToUTF8 et UTF8ToSys.... Sachant que certains disent aussi qu'il ne faut pas que le fichier source soit lui-même en UTF8 (sans dire dans quel encodage le mettre...). Bref, j'ai tout essayé, changé l'encodage de mes fichiers : Rien ne fonctionne !

Voici en clair ce que je fais : Je récupère un chaîne (via un paramètre, un fichier de config etc.) Je traduis ma chaîne str en remplaçant $233; par "é" => "aaaéaaa", et je veux qu'un bouton utilise cette chaine comme "caption". C'est là que ça coince :
L'instruction
Code :
button1.Caption := str;
ne fait rien à cause d'un problème d'encodage. Quelqu'un a-t-il déjà galéré avec Lazarus et ce p... d'UTF8 sous Mac OS X.

Cela fait 3 jours entiers que je perds pour afficher un simple libellé sur un bouton, ça devient du grand n'importe quoi. Le projet est en cours depuis 3 ans, et j'avoue que je suis à deux doigts de mettre Lazarus dans la corbeille de mon Mac et de passer au C...

Suis-je le seul développeur Lazarus sur Mac OS X ?

Merci pour vos réponses.
sinfoni est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/12/2011, 15h02   #5
Nouveau Membre du Club
 
Inscription : mars 2006
Messages : 117
Détails du profil
Informations personnelles :
Localisation : France, Nord (Nord Pas de Calais)

Informations forums :
Inscription : mars 2006
Messages : 117
Points : 33
Points : 33
Voilà, 3 jours. 3 Jours pour tomber par hasard sur la fonction ISO_8859_1ToUTF8 ...

Donc pour mettre une chaîne contenant des caractères accentués comme label de composant dans lazarus sous Mac OS X, il faut faire :

Code :
button1.Caption := ISO_8859_1ToUTF8(str);
(Ajouter LConvEncoding dans la clause uses pour utiliser cette fonction)

Problème résolu, enfin sur ma plateforme Mac Intel, reste à voir ce que donnera l'application sur PowerPC...

Je pense que le principal problème de Lazarus sur Mac OS X, c'est le manque d'utilisateurs.

Ma question reste donc ouverte : Y-a-t-il des développeurs Lazarus sous Mac OS X ???...
sinfoni est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 02/12/2011, 18h59   #6
Membre actif
 
Avatar de ChPr
 
Inscription : septembre 2005
Messages : 504
Détails du profil
Informations personnelles :
Âge : 66

Informations forums :
Inscription : septembre 2005
Messages : 504
Points : 184
Points : 184
Citation:
Envoyé par sinfoni Voir le message
... Ma question reste donc ouverte : Y-a-t-il des développeurs Lazarus sous Mac OS X ???...
Simplement pour aider, peut-être y en a-t-il plus

Cordialement.

Pierre
ChPr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2011, 15h57   #7
Membre expérimenté
 
Avatar de Gouyon
 
Homme Rémi Gouyon
Développeur informatique
Inscription : novembre 2003
Messages : 539
Détails du profil
Informations personnelles :
Nom : Homme Rémi Gouyon
Âge : 48
Localisation : France, Loiret (Centre)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : novembre 2003
Messages : 539
Points : 531
Points : 531
Citation:
Envoyé par sinfoni Voir le message

Ma question reste donc ouverte : Y-a-t-il des développeurs Lazarus sous Mac OS X ???...
Je ne sais pas (et je compatis) mais moi j'en cherche un pour compiler un gros projet ICI.
Il est en cours de développement et il tourne sous windows et linux (avec lequel j'ai eu mon lot de soucis aussi) mais pour le faire tourner sous Mac il faudrait que je m’achète un Mac et je ne suis pas prêt a faire un tel investissement (enfin disons plutôt que mon banquier à opposé un refus catégorique )
__________________
Il y a des jours où j'éprouve une haine profonde envers microsoft
Venez vous défouler ici ou c'est amusant
Mon modeste site et mes modestes oeuvres sont
Rémi
Gouyon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2012, 17h47   #8
Membre habitué
 
Avatar de donnadieujulien
 
Développeur informatique
Inscription : avril 2008
Messages : 410
Détails du profil
Informations personnelles :
Âge : 27

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : avril 2008
Messages : 410
Points : 142
Points : 142
unicode string a mon avis
__________________
On ne peut créér ce qu'on ne peut imaginer...
Tu sens la puissance du BIT?
donnadieujulien est déconnecté   Envoyer un message privé Réponse avec citation 01
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h58.


 
 
 
 
Partenaires

Hébergement Web