Squeak.ru - шаблоны программирования

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

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

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

Или нужно явно указывать параметры?

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

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

26.01.2010

  • Пожалуйста, определите, что вы подразумеваете под ручкой и работой. Что бы вы хотели сделать, и что вместо этого произойдет, когда вы попробуете это сделать? 26.01.2010

Ответы:


1

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

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

Однако первая часть сложнее, так как анзистринг может быть передан непосредственно в «массив констант» без преобразования.

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

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

обновлено Я все равно отлаживал, и он действительно проходит через wideformatbuf и вызывает System.@WStrFromLStr рядом с меткой cvtansistr (sysutils.pas:10208 в моем 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. Наслаждаться!

26.01.2010
Новые материалы

Угловая структура архитектуры
Обратите внимание, что эта статья устарела, я решил создать новую с лучшей структурой и с учетом автономных компонентов: https://medium.com/@marekpanti/angular-standalone-architecture-b645edd0d54a..

«Данные, которые большинство людей используют для обучения своих моделей искусственного интеллекта, поставляются со встроенным…
Первоначально опубликовано HalkTalks: https://hacktown.com.br/blog/blog/os-dados-que-a-maioria-das-pessoas-usa-para-treinar-seus-modelos-de-inteligencia-artificial- ja-vem-com-um-vies-embutido/..

Сильный ИИ против слабого ИИ: различия парадигм искусственного интеллекта
В последние годы изучению и развитию искусственного интеллекта (ИИ) уделяется большое внимание и прогресс. Сильный ИИ и Слабый ИИ — две основные парадигмы в области искусственного интеллекта...

Правильный способ добавить Firebase в ваш проект React с помощью React Hooks
React + Firebase - это мощная комбинация для быстрого и безопасного создания приложений, от проверки концепции до массового производства. Раньше (знаете, несколько месяцев назад) добавление..

Создайте API с помощью Python FastAPI
Создание API с помощью Python становится очень простым при использовании пакета FastAPI. После установки и импорта вы можете создать приложение FastAPI и указать несколько конечных точек. Каждой..

Веселье с прокси-сервером JavaScript
Прокси-серверы JavaScript — это чистый сахар, если вы хотите создать некоторую общую логику в своих приложениях, чтобы облегчить себе жизнь. Вот один пример: Связь клиент-сервер Мы..

Получить бесплатный хостинг для разработчиков | Разместите свой сайт за несколько шагов 🔥
Статические веб-сайты — это веб-страницы с фиксированным содержанием и его постоянным содержанием. Но теперь статические сайты также обрабатывают динамические данные с помощью API и запросов...