Bonjour,
Première fois que je migre un projet D7 en D10 donc de ANSI vers UNICODE
Jusqu'à présent, j'ai migré des bouts de code que j'avais écrit en D3 à D7 vers DXE2, je maîtrisais la fonction, la plupart du temps une lecture de fichier ANSI
Mais je suis confronté à un problème
Le code dont je dispose, à priori D7
Exemple : 'é' devient 'é' puis FonctionMaison génère une chaine de longueur 12
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 procedure TxxxForm.btnxxxClick(Sender: TObject); begin memo.Text := FonctionMaison(AnsiToUtf8(edInput.Text), TRUE); end;
Même code en D10, on ignore le warning < W1057 Transtypage de chaîne implicite de 'RawByteString' en 'string' >
Mais la problème
Exemple : 'é' devient 'é' puis c'est reconverti en 'é' puis FonctionMaison génère une chaine de longueur 10
Evidemment, avant, cela traitement deux caractères mais maintenant plus qu'un seul !
Ce qui est encore plus surprenant c'est ceci
on ignore les warnings très nombreux de conversion implicite
Label5 affiche 'String UTF8 : é', ça c'est top ! exactement ce que je veux, cela conserve l'UTF8 sans le reconvertir, génial le LStrCat concatène la constante Ansi et ensuite c'est l'ensemble qui est converti de Ansi vers Unicode, ça me plait mais va exploiter cette étrangeté
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 var RBS8: RawByteString; begin RBS8 := UTF8Encode('é'); Label5.Caption := 'String UTF8 : ' + RBS8; Label6.Caption := RBS8; ShowMessage(RBS8);
Label6 affiche 'é' ... ma question : comment désactiver la conversion implicite UTF8 vers UNICODE, je voudrais voir 'é' ?
ShowMessage affiche 'é'
Bon évidemment, j'ai trouvé une astuce mais il doit bien exister une syntaxe entre AnsiString, UTF8String, RawByteString, UnicodeString pour éviter ça
Label8 et ShowMessage affiche correctement mon 'é'
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 PStrRec(PByte(RBS8) - SizeOf(StrRec)).codePage := CP_ACP; Label8.Caption := RBS8; ShowMessage(RBS8);
Car oui, je veux passer à FonctionMaison qui ne doit pas être modifié, une chaine UTF8 dans une UnicodeString ...
Donc pas de TBytes ni te TEncoding comme on le pratique avec les TStream
Bon ça c'est si je veux que l'exe D10 et l'exe D7 fasse la même chose, mais je sais que j'ai découvert un loup bien méchant et que le chaperon Rouge que je suis va le manger !
Partager