[fpc-devel] TRegistry and Unicode
Marco van de Voort
core at pascalprogramming.org
Mon Mar 4 12:15:45 CET 2019
Op 3/3/2019 om 11:17 AM schreef Yuriy Sydorov:
> On 02.03.2019 18:53, Bart wrote:
>> On Sat, Mar 2, 2019 at 3:48 PM Joost van der Sluis <joost at cnoc.nl>
>> wrote:
>>
>>> The utf8encode should go, just like the utf8decode's that we fixed
>>> already.
>>
>> Shall I post a patch in the bugtracker?
>> If so: instead of
>> SomeAnsiString := UTf8Encode(SomeUnicodeString) do I make it an
>> implicit conversion (SomeAnsiString := SomeUnicodeString), or an
>> explicit typecast (suppressing warnings: SomeAnsiString =
>> String(SomeUnicodeString))?
>
> This is good if you assign the result of ReadString() to a regular
> ansistring var.
(which is the case here)
> But if you assign it to a utf8string,unicodestring,widestring var - it
> will not return correct result for chars that are missing in the
> current system code page. This is bad for a user app which is using
> unicodestring everywhere and don't bother with ansistrings and their
> default code page.
>
Yes, but this is a feature of the language. String conversions go over
the default stringtype, and if that can't harbor all characters, there
will be loss.
> The proper solution is to make string params and the result to be
> utf8string. This way proper conversion to regular ansistring will be
> done for the result and unicodestring/widestring will be properly
> handled as params.
We already have two and an half options:
- Delphi 2009+ everything unicodestring
- Delphi old everything locale windows encoding
- Lazarus hack set default encoding to utf8.
On *nix the last two are usually the same, and in time, the last two
might also merge on windows, since Windows has options to set the
default codepage to utf8 since 2018 april update (though I have not seen
testreports yet).
There is no need to further change interfaces to provide yet another
option which does yet another option which is useful for only a limited
time.
More information about the fpc-devel
mailing list