[fpc-pascal] code example where AnsiString used in FCL (SqlDB) causes data loss
Jonas Maebe
jonas.maebe at elis.ugent.be
Wed May 11 15:32:41 CEST 2016
Graeme Geldenhuys wrote on Wed, 11 May 2016:
> My test program under FPC 2.6.4 doesn't give problems. It's when that
> same program is compiled under FPC 3.0.0 that it does. All due to String
> (and thus AnsiString) changing its encoding based on the running
> environment.
In FPC 2.6.x, if you use a widestring manager (such as cwstring), the
code page of shortstring/ansistring/pchar /also/ depends on the
running environment, in fact in exactly the same way as in FPC 3.x.
The main thing that is new in FPC 3.x, is that instead of the RTL
assuming that all ansistring contents are always encoded in this code
page, we now explicitly attach the code page information in a hidden
field of the ansistring structure (so different ansistrings can have
different encodings, but the default for plain ansistrings remains
exactly the same).
> With FPC 2.6.4 compiled programs, no matter the environment
> (UTF-8 or Latin-1), my test program behaves the same.
As I asked before: did you change "String" to "Unicodestring" when
compiling under FPC 2.6.4? As mentioned before, {$modeswitch
unicodestrings} is a new feature in FPC 3.0 and is ignored by FPC
2.6.4 (you will get a warning about this when compiling with FPC
2.6.4, but not an error).
Jonas
More information about the fpc-pascal
mailing list