[fpc-pascal] Concatenating CP Strings
Mattias Gaertner
nc-gaertnma at netcologne.de
Sat Sep 15 07:34:37 CEST 2018
On Sat, 15 Sep 2018 01:38:33 +0200
Martok <listbox at martoks-place.de> wrote:
> Hi all,
>
> concatenating codepage strings is documented to be a bit weird:
> <http://wiki.freepascal.org/FPC_Unicode_support#String_concatenations>
>
> Knowing this, how does one achieve the following?
>
> - have a string in any dynamic codepage
> - append another string (possibly from different CP), or a literal
> - have the result in the same dynamic codepage as before
>
> Literally, "transcode the new part and plop it at the end"?
>
> Using AnsiStrings does not work, as the declared CP is CP_ACP, which is not the
> dynamic CP, and loss of data is likely.
There is a neat RTL function SetCodePage to set the CP of a string.
For your string having the wrong CP use this before concatenating:
SetCodePage(s,RealCP,false);
To have the result in a specific codepage use
SetCodePage(result,NeededCP,true);
>[...]
> PS:
> Also, somewhat related: how compatible are the different widestring managers
> supposed to be? Windows doesn't support CP_UTF16(BE) (which really is UCS2 - aka
> the MBCS alias of WideString),
Only on ancient Windows it was UCS2. Even on old Win7 it was UTF16. I
don't remember when the transition happened. Sadly, there are still
many Windows applications only supporting UCS2.
> but fpwidestring has correct handling for it.
Mattias
More information about the fpc-pascal
mailing list