Problème d'encodage - UTF8 vers ANSI
Bonjour,
La mise à jour vers la version 2.24 64 bits continue à poser des problèmes :
Dans mon projet, je suis amené à créer une base de données avec des champs noms et prénoms. Les noms étant stockés en majuscule et la première lettre des prénoms en majuscule et les autres en minuscule (ce qui fait par une fonction spécifique qui fonctionne bien). Jusqu'à présent, la séquence de code suivante (expl pour le nom) fonctionnait sans problème Laz Util étant dans la options du projet et LazUTF8 dans Uses :
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| procedure TF_Gene.DB_NaissNomEnftExit(Sender: TObject);
Var NomEnfant : String ;
begin
NomEnfant := Upcase(Utf8ToWinCP(DB_NaissNomEnft.Text)) ;
DB_NaissNomEnft.text := NomEnfant ;
DB_NaissPnomEnft.SetFocus ;
end;
procedure TF_Gene.DB_NaissNomEnftKeyPress(Sender: TObject; var Key: char);
begin
if Key = #13 Then DB_NaissPnomEnft.setFocus ;
end; |
par exemple si j'entrais comme nom "estÉve" ( le É étant entré par la touche Alt144) je récupérais dans le champ "NomEnfant" de la base "ESTÉVE". Depuis le passage à la version 2.24 il est impossible de traduire en Ansi les entrées faites dans les contrôles qu'il s'agisse du type TDB_edit ou simplement Ed_Edit et que l'on utilise UTF8ToANSi, UTF8ToSys ou UTF8ToWinCp. Actuellemnt je récupère NomEnfant = $000000000E318CB8^: 'EST'#$C9'VE'
Comment se sortir de ce mauvais pas ?
Affichage et encodage UTF8-Ansi
Bonjour,
J'utilise Zeos pour communiquer avec la base de données. Dans le ZC_Naiss la propriété Controlcodepage est bien Ccp-UTF8.
A l'affichage dans le TBD_Edit j'ai bien EST?VE ainsi d'ailleurs que dans le champ correspondant de la base que j'ai vérifié en utilisant sqliteadmin .
C'est extrêmemnt génant alors que cela fonctionnait bien avec la version 2.0 32 bits de Lazarus que j'utilisais il n'y a pas si longtemps.
Efectivement le problème n'en n'est pas réellement un
Bonjour,
J'ai supprimé toutes les instructions "UTF8toANSi" ou similaires de mon projet et l'affichage dans les formulaires du projet est alors correct quel que soit le caractère concerné. Dan les enregistrements de la base, les caractères accentués et autres continuent de s'afficher avec des codes particuliers, mais en réalité cela ne me gène pas vraiment car, pour communiquer avec mes correspondants j'ai l'obligation de transmettre des fichiers Excel et que, pour cela, j'ai intégré un transfert des tables vers des fichiers CSV et que j'utilise Notepad++ et sa possibilité d'encodage UTF8 vers ANSI pour construire en suite le fichier Excel.
CE qui me posait problème c'est que dans les versions précédentes j'utilisais les fonction de conversion et que l'affichage était correct, mais bon, le plus simple étant le mieux le problème est résolu.
Merci pour votre intérêt et vos suggestions.
R.O.