Delphi XE2 AnsiFormat() and ANSI String constants

4.8k views Asked by At

Is there a handy Format() function that works only on Ansi strings? Because everytime I use an AnsiString with Format() I get a warning. And no, I don't want Delphi to convert my AnsiStrings back and forth between Wide and Ansi strings. That is just making things awfully slower. Also, is there a way to force a string constant to be Ansi? check this out

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

and then when I use SomeStrFunc('ABC') it will call the wide string version. What if I want to use the Ansi version and force Delphi to store 'ABC' constant in AnsiChars.

2

There are 2 answers

3
kludg On BEST ANSWER

There is Ansi version of Format function in System.AnsiStrings unit

3
Remy Lebeau On

Serg answered your question about an AnsiString version of Format(). I'll answer your other question.

String literals are encoded based on the context they are used, so to force a literal to a particular encoding, you have to tell the compiler which encoding it needs to use, eg:

SomeStrFunc(AnsiString('ABC'));

Or

const
  cABC: AnsiString = 'ABC';

SomeStrFunc(cABC);