On 06.03.2019 22:21, Bart wrote:
Using UTF8String in TRegistry instead of String forces users to
consider the fact that returned strings are Utf8Encoded now always,
even if they (probably most of them) do not need that because what
they retrieve from and put in the registry fits into their codepage.
And somebody out there will have code that checks if
ReturnedString[Index] = #$E4 ("รค" in my codepage), and have the
sourcefile in ANSI (system codepage), and now this will fail, because
that character will now be made up of 2 bytes.

If you declare a function result as utf8string instead of string (ansistring) then automatic conversion will be performed when you assign the result of the function to a variable of type string (ansistring). You will gen a classic 1-byte per character string if your current encoding is 1-byte encoding.
I mentioned this earlier.

Just check this. Change the declaration to:

function TRegistry.ReadString(const Name: utf8string): utf8string;

Yuriy.
_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel

Reply via email to