Delphi XE2 AnsiFormat () и строковые константы ANSI - PullRequest
5 голосов
/ 07 октября 2011

Есть ли удобная функция Format (), которая работает только со строками Ansi?Потому что каждый раз, когда я использую AnsiString с Format (), я получаю предупреждение.И нет, я не хочу, чтобы Delphi конвертировал мои строки AnsiString туда и обратно между строками Wide и Ansi.Это просто делает вещи ужасно медленными.Кроме того, есть ли способ заставить строковую константу быть анси?проверьте это

function SomeStrFunc(S: AnsiString): AnsiString; overload;
function SomeStrFunc(S: String): String; overload;

, а затем, когда я использую SomeStrFunc ('ABC'), он вызовет версию с широкой строкой.Что если я захочу использовать версию Ansi и заставить Delphi хранить константу 'ABC' в AnsiChars.

Ответы [ 2 ]

11 голосов
/ 07 октября 2011

В System.AnsiStrings единице

есть Ansi-версия функции Format.
7 голосов
/ 07 октября 2011

Сергей ответил на ваш вопрос о AnsiString версии Format().Я отвечу на другой ваш вопрос.

Строковые литералы кодируются в зависимости от контекста, в котором они используются, поэтому для принудительного литерала в конкретной кодировке вы должны указать компилятору, какую кодировку ему необходимо использовать, например::

SomeStrFunc(AnsiString('ABC'));

Или

const
  cABC: AnsiString = 'ABC';

SomeStrFunc(cABC);
...