UTF8 dans une String de D10
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
Code:
1 2 3 4
| procedure TxxxForm.btnxxxClick(Sender: TObject);
begin
memo.Text := FonctionMaison(AnsiToUtf8(edInput.Text), TRUE);
end; |
Exemple : 'é' devient 'é' puis FonctionMaison génère une chaine de longueur 12
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
Code:
1 2 3 4 5 6 7 8
|
var
RBS8: RawByteString;
begin
RBS8 := UTF8Encode('é');
Label5.Caption := 'String UTF8 : ' + RBS8;
Label6.Caption := RBS8;
ShowMessage(RBS8); |
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é
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
Code:
1 2 3
| PStrRec(PByte(RBS8) - SizeOf(StrRec)).codePage := CP_ACP;
Label8.Caption := RBS8;
ShowMessage(RBS8); |
Label8 et ShowMessage affiche correctement mon 'é'
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 !