[Lazarus] SynEdit.Lines.LoadFromFile and non-ascii filenames
bartjunk64 at gmail.com
Wed Sep 21 16:14:56 CEST 2011
After staring myself blind for several hours on why my program
malfunctioned, I finally noticed a difference in behaviour between
SynEdit.Lines.LoadFromFile and e.g. TMemo.Lines.LoadFromFile with
regard to non-ascii characters in filenames.
As I understood it the proper way to open files, when getting the
filename form a control like a TOpenDialog is to first convert the
Utf8 string to Ansi/Systme-enccoding and then use this converted
string in LoadFromFile():
Utf8Fn := Opendialog1.Filename;
//convert to system encoding (I am on Windows), using FileUtils unit
AnsiFn := Utf8ToSys(Utf8Fn);
//Use converted string in LoadFromFile()
This however throws an exception when using a filename like äbc.txt.
The exceptionmessage is:
Unable to open file "F:\LazarusProjecten\bugs\FileNames\?bc.txt"
(Notice the ? in the name, this message was coverted back to Utf8 to
show it in a TMemo)
If I do NOT convert the string first, the SynEdit loads the file just fine.
This behaviour however, is exactly the opposite of e.g TMemo, where
you MUST convert the filename to Ansi/System encoding, or the
LoadFromFile() will fail.
I find this a bit confusing, to say the least.
Does anyone know if this behaviour (and thus the discrepancy with e.g.
TMemo) is by design or a bug?
B.t.w. I tested this behaviour on WinMe (Win9x)/vFat filesystem, and
at first I thougt it might be just an OS issue, but the behaviour is
the same on Win7/NTFS (Laz. r32445/Fpc 2.4.4).
More information about the Lazarus