Delphi обрабатывает параметры строки формата автоматически, если различная строковая кодировка используется?

Другими словами: это работает, т.е. является кодированием параметра, принятого во внимание при генерации строкового результата unicode?

function Test: string;
var
  Pattern: string;
  Parameter: UTF8String;
begin
  // ...
  Result := Format(Pattern, [Parameter]);
end;

Или действительно ли необходимо явно бросить параметры?

Result := Format(Pattern, [string(Parameter)]);

Из-за открытых параметров компилятор не дает подсказок или предупреждений...

5
задан Daniel Rikowski 27 January 2010 в 09:05
поделиться

1 ответ

Формат

представляет собой массив const, так что в первом случае, предполагая, что передается tutf8string, а во втором случае - tunicodestring, передается в рутину ассемблера.

Таким образом, вторая часть форсирует преобразование и наверняка является нормальной.

Первая часть, однако, сложнее, так как ответ может быть передан непосредственно "массиву констант", без преобразования.

Однако, если посмотреть в исходники ассемблера wideformatbuf(), то можно увидеть, что поток идет от cvtansistring к cvtansistring, где он, кажется, преобразуется в unicodestring.

Однако весь функционал format() немного запутан с множеством перегруженных вариантов. Чтобы быть уверенным, вам придется пройти через это, что-то, что я в настоящее время не могу быстро протестировать.

update I debugged anyway, and it indeed passes through wideformatbuf, and calls the System.@WStrFromLStr near the cvtansistr label (sysutils.pas:10208 in my D2009).

Вывод: правильно набранная строка UTF-8 будет корректно преобразована в tunicodestring.

Моя тестовая программа:

program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils;


 var u,u2 : string;
    a   :utf8string;  
 begin
    a:='asrfdsfsd';
    u:=format('%s',[a]); // breakpoint here
 end.

поставила точку останова на отмеченную строку выше, включила "debug dcu's" в опциях проекта и отлаживала с помощью f7/f8/f9. Наслаждайтесь!

5
ответ дан 14 December 2019 в 19:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: