[Lazarus] Lazarus (UTF8) and Windows: SysToUTF8, UTF8ToSys... Is there a better solution?

Jürgen Hestermann juergen.hestermann at gmx.de
Thu Dec 19 17:33:45 CET 2013


Am 2013-12-18 02:16, schrieb Marcos Douglas:
 > On Tue, Dec 17, 2013 at 4:15 PM, Jürgen Hestermann
 > <juergen.hestermann at gmx.de> wrote:
 >> I am just writing a file manager for Windows (hopefully can port it to Linux
 >> later)
 >> and I don't see any performance problems by using UTF8 in my program while
 >> the API is UTF16.
 >> Most (if not all) things that I do with files take much longer than the
 >> string conversion so it does not matter much.
 > Ok. But how do you work, using SysToUTF8 / UTF8ToSys?

I use the following:

---------------------------
var X,Path : UTF8String;
     FW     : Win32_Find_DataW;

H := FindFirstFileW(pwidechar(UTF8Decode(WinAPIPathName(Path))),FW);
...
X := UTF8Encode(UnicodeString(FW.cFileName));
---------------------------

where WinAPIPathName just prepends the "\\?\" string to the pathname to overcome the 255 char length limitation.
Path is the UTF8 string for the file search and X holds the found file name(s) in UTF8 notation.
When I later need an API-call I convert back:

---------------------------
... Windows.DeleteFileW(pwidechar(UTF8Decode(WinAPIPathName(AppendDir(Pfad,X)))))
---------------------------










More information about the Lazarus mailing list