On Fri, 3 Jan 2020, Ondrej Pokorny wrote:

On 03.01.2020 10:14, Michael Van Canneyt wrote:
On Fri, 3 Jan 2020, Ondrej Pokorny wrote:

On 03.01.2020 00:35, Werner Pamler wrote:
Am 02.01.2020 um 20:10 schrieb Ondrej Pokorny:
TStrings.SaveTo*() writes BOM by default. Formerly the BOM was not written.

There is also the problem that currently it is not possible, without further action, to retain the BOM state of a file loaded into a stringlist, modified and written back because the presence of a BOM is forgotten after reading - see the other discussion

(https://lists.freepascal.org/pipermail/fpc-devel/2020-January/042363.html).

Wouldn't it make sense to introduce a )Read)BOM property (a boolean parameter or an element of the new Options) which gets its value when the file is loaded or the strings are assigned? Then the user can set the StringList.WriteBOM equal to the StringList.BOM when he wants to keep the BOM for writing back.

Yes, that is perfectly reasonable. I'd prefer a new element in Options but there is the risk that Delphi adds a new option in the future and then we'll have a problem. So maybe a "PreserveBOM" or "SetWriteBOMOnLoad" property will be better. When set to true, WriteBOM will be set in LoadFrom*() according to BOM presence of the loaded file.

I don't see why a new option is a problem ? They are not streamed anyway.

So I would do the opposite, add an option. soPreserveBOM.

If you are fine with it, me as well.

Yes, the problem is if somebody streams the property or uses Ord(soPreserveBOM) for something etc. I admit that it is a very hypothetical issue.

I also think it is very hypothetical, and not a problem unless you want to use
the same stream in Delphi and FPC.

Well, you have my blessing for the soPreserveBOM :)

Michael.

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

Reply via email to