There seems to be an inconsistency.
In systemh.inc it is specified:
const
CP_ACP = 0; // default to ANSI code page
But the article by your link says:
Codepage 0 or codepage 65001 are both correct, they mean UTF-8.
Well, anyway it seems to be 'not a bug, but a feature'. Delphi compatibility?
LazUtf8 unit changes what is declared in System. That is what Bart says.
So, when your project uses LCL (or just use LazUtils package and include LazUtf8 in uses section of main program, the default code page is utf8 (not the code page fetched from operating system, which is fpc default).
Strictly speaking, this is not Delphi compatible, as Delphi uses UTF16 by default. But, except in special cases (which are described in wiki article from Juha's above link), when using String (= AnsiString) type, the program behaves just like in Delphi.
When Lazarus moved to FPC 3 from earlier compiler versions, this approach was chosen. It allowed very smooth transition for LCL to then newly introduced codepage-aware strings. At the same time, we got (almost) Delphi compatibility.
Please read carefully the wiki page Juha linked to. If you have read it already, read it again.
And then... read it again.
And once more.
You can also try to take a look at initialization section of LazUtf8 unit and follow what is called from there.
Might help or might make more confusion... But worth trying.