[fpc-devel] new string - question on usage

Luiz Americo Pereira Camara luizmed at oi.com.br
Mon Oct 10 22:11:30 CEST 2011


On 10/10/2011 14:12, Martin wrote:
> With fpc trunk strings are now codepage aware.
>
> I currently face the issue, that lot's of old code just use "var foo: 
> string". or sometimes explicit "ansistring". No idea what encoding 
> that stores, put it does not seem to be utf8.
>
> If I pass such a string (which contains utf8, but seems not to be 
> marked as such) to a function declared as
>   function Bar(val: Utf8String): Utf8String;
> then I can see that it gets converted (which of course renders the 
> data completely broken).
>
> Now until I can convert all the strings to Utf8String, and until I can 
> test all of that.... I need some work around for the very few places 
> where such a call happens.
>
> Is there a way to pass the string as argument but to suppress 
> conversion (but keep the function declaration as it is with utf8string)?

AFAIK the fpc feature is incomplete and buggy so it will not work anyway 
and making workarounds to it now is a bad decision. Changes in Lazarus 
must be done after the dust settle in fpc side.

When this time comes, this is what i see:

1- Most of LCL must be code page agnostic, so not use 
UTF8String/AnsiString directly (keep String)
2- It should have (dont know if currently has) a compiler switch to 
change the default code page to UTF8 or whatever, so all variables with 
type String will map to UTF8String.
3- The UTF8String/AnsiString type should be reserved where strictly 
necessary like libraries that require UTF8 or RTL interfacing

The bug that you cited wont happen if you use the feature of point 2. 
But this wont work properly anyway since the unicode RTL/classes is not 
done yet.

Luiz




More information about the fpc-devel mailing list