[fpc-devel] new string - question on usage

Hans-Peter Diettrich DrDiettrich1 at aol.com
Tue Oct 11 21:37:27 CEST 2011


Michael Schnell schrieb:
> On 10/11/2011 11:20 AM, Hans-Peter Diettrich wrote:
>> Michael Schnell schrieb:
>>> Why should a function Utf8ToLower be used (or even be  defined for 
>>> normal use) ?
>>
>> Because it expects and UTF8 argument, and provides an UTF8 result, so 
>> that no further conversions are required when used with strings of 
>> exactly that encoding.
> I don't understand your argument. If ToLower gets a new string that is 
> UTF8 encoded, the result should be a new string that is UTF8 encoded. So 
> why bother. Checking the encoding Word and branching tho the appropriate 
> encoding-aware functionality is a very fast operation.

Why implement the upper/lower translation N times, when afterwards the N 
encodings have to be converted into the Result encoding? Where the 
encoding conversions already exist...


>>> With dynamically encoded Strings "ToLower" should work for any encoding.
>>
>> You mean something like this?
>>   function ToLower(s: RawByteString): RawByteString;
>> [dunno whether RawByteString is an allowed Result type at all]
> In fact I still don't understand the difference between a type called 
> "RawByteString"and a basic new String that happens to be set to the 
> encoding "RawByte".

I only have the Delphi implementation at hand, and there every string 
type has an associated encoding. E.g. the default AnsiString has 
codepage 1252 encoding, and when a string is assigned to such a 
variable, it is converted into codepage 1252. The *only* exception is 
the RawByteString type, which can have any encoding.


> IMO, calling ToLower with a string that is set to the encoding "RawByte" 
> does not make sense and should generate an exception.

When a string is assigned to an RawByteString, both point to the 
original string, which has a valid (non-raw) encoding. The only 
exception is an empty string, with a Nil pointer and consequently no 
stored encoding - but such a string never deserves any conversion.

DoDi




More information about the fpc-devel mailing list