On Sat, 15 Sep 2018 01:38:33 +0200 Martok <list...@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 _______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal