formato è array di const, quindi nel primo caso, supponendo una tutf8string viene passato, e nel secondo caso un tunicodestring viene passato alla routine assemblatore.
Quindi la seconda parte impone la conversione ed è ok di sicuro.
La prima parte è più difficile, dato che l'ansistring può essere passato direttamente a "array of const", senza conversione.
Tuttavia, se si guarda nell'origine dell'assemblatore wideformatbuf(), si vede il flusso passare da cvtansistr a cvtansistring, dove sembra che sia stato convertito in unicodestring.
Tuttavia l'intero contenuto di format() è un po 'disordinato con le numerose varianti sovraccaricate. Per essere sicuro, dovrai attraversarlo, cosa che al momento non posso testare rapidamente.
aggiornamento ho il debug in ogni caso, e passa infatti attraverso wideformatbuf, e invita il Sistema @ WStrFromLStr vicino all'etichetta cvtansistr (sysutils.pas: 10208 nel mio D2009)..
Conclusione: una stringa UTF-8 correttamente digitata verrà convertita correttamente in tunicodestring.
Il mio programma di test:
program Project2;
{$APPTYPE CONSOLE}
uses
SysUtils;
var u,u2 : string;
a :utf8string;
begin
a:='asrfdsfsd';
u:=format('%s',[a]); // breakpoint here
end.
mettere un punto di interruzione sulla linea tracciata in precedenza, impostare "debug del DCU" su nelle opzioni di progetto e il debug utilizzando F7/F8/F9. Godere!
fonte
2010-01-26 15:56:37
Si prega di definire cosa intendete per "gestire" e "lavoro". Cosa vorresti che * * accadesse e cosa succede invece quando lo hai provato? –