[Lazarus] TStringList.LoadFromFile encoding parameter

Michael Schnell mschnell at lumino.de
Mon Jul 11 10:24:37 CEST 2016


With Delphi, TStringList seems to be hard coded to use UTF16 with "Add" 
and StringList[i] (which is a really bad idea in a String system 
providing versatile encoding). TStringList.LoadFromFile seems do default 
to the system ANSI encoding (which seems like rather contra-intuitive in 
a system that defaults to coding strings as UTF16).

With Lazarus, TStringList seems to be (considered to be, as 
StrinCodePage(SomeString ) is 65001) hard coded to use UTF8 with "Add" 
and StringList[i] (which is a bad idea, as well, but not worse than 
Delphi forcing UTF16) TStringList.LoadFromFile uses (defaults to) "no 
conversion" which in fact means UTF8 encoding (which in fact is straight 
forward and obvious, and hence better than Delphi).

I don't see why a redesign of the "hard coded UF8" TStringList would be 
necessary just for setting the code of the file to be loaded by 
TStringList.LoadFromFile, just a settable conversion at that function 
(and the at SaveToFile) would be helpful. Of course a versatile encoding 
of TStrings would be a much better way to go, but I don't suppose this 
ever will happen (partly because Delphi does not feature his either).


The current makeup results in different behavior between Delphi and 
Lazarus.

I was hit by this when doing a (Windows) program that analysis text 
files that are generated in local (German)  ANSI code.

To load a text file, the most convenient function to me seems to be 
TStringList.LoadFromFile and here (with the current official Windows 
distribution of Lazarus) the output of myString := StringList[i] 
obviously is wrong.


Test: Speed


More information about the Lazarus mailing list