formato es variedad de const, por lo que en el primer caso, suponiendo un tutf8string se pasa, y en el segundo caso un tunicodestring se pasa a la rutina de ensamblador.
Así que la segunda parte obliga a la conversión y está bien con seguridad.
La primera parte es más difícil, ya que el ansistring se puede pasar directamente a "array of const", sin conversión.
Sin embargo, si observa el origen del ensamblador wideformatbuf(), verá que el flujo va de cvtansistr a cvtansistring, donde parece que se convierte a unicodestring.
Sin embargo, todo el formato() es un poco complicado con las muchas variantes sobrecargadas. Para estar seguro, tendrás que atravesarlo, algo que actualmente no puedo probar rápidamente.
actualizan I depurado todos modos, y de hecho pasa por wideformatbuf, y llama al sistema @ WStrFromLStr cerca de la etiqueta cvtansistr (sysutils.pas: 10208 en mi D2009)..
Conclusión: una cadena UTF-8 correctamente tipeada se convertirá correctamente a tunicodestring.
Mi programa de pruebas:
program Project2;
{$APPTYPE CONSOLE}
uses
SysUtils;
var u,u2 : string;
a :utf8string;
begin
a:='asrfdsfsd';
u:=format('%s',[a]); // breakpoint here
end.
poner un punto de interrupción en la línea marcada arriba, ponga "depuración de DCU" en en las opciones del proyecto, y de depuración utilizando F7/F8/F9. ¡Disfrutar!
Defina lo que quiere decir con "manejar" y "trabajar". ¿Qué le gustaría * que suceda, y qué pasa en su lugar cuando lo haya probado? –