[fpc-devel] fpc compiler wrong encoding in console output on Windows

Tomas Hajny XHajT03 at hajny.biz
Wed Aug 30 15:57:16 CEST 2023

On 2023-08-30 13:49, Mattias Gaertner via fpc-devel wrote:
> On 30.08.23 12:04, Tomas Hajny via fpc-devel wrote:
>> On 2023-08-28 15:53, Ondrej Pokorny via fpc-devel wrote:
>> [...]
>> Your output is different from mine (using a freshly compiled trunk 
>> compiler):
>> Free Pascal Compiler version 3.3.1 [2023/08/29] for i386
>> Copyright (c) 1993-2023 by Florian Klaempfl and others
>> Target OS: Win32 for i386
>> Compiling t2.pas
>> t2.pas(4,2) Note: User defined: ä
> Then you don't have default windows setup. Maybe you installed the cp 
> 65001?

Default setup of what exactly? I didn't install anything special, but my 
MS Windows installation indeed supports CP 65001. I guess that it may be 
different for different MS Windows versions - specifically, I tested it 
on MS Windows 10 Enterprise version 22H2. However, that shouldn't make a 
difference, because Ondrej stated that he gets compiler output in UTF-8, 
but I also tried redirecting the output to a file and the result is in 
CP852 which is my default "ANSI" codepage (and thus also the default 
console codepage). There's no place where UTF-8 availability might 
change the result in this. However, I _didn't_ test it under Lazarus. I 
suspect that Lazarus messing with the codepages may change the behaviour 
by changing either the system codepage or console codepage to UTF-8 and 
this then results in compiler emitting output in this different codepage 
(i.e. UTF-8).

>> [...]
>> However, I run the compiler from regular command line, not from 
>> Lazarus.
> I get the same in cmd.exe and via TProcess.

I.e. you open cmd.exe e.g. via the Windows key+R (rather than by 
shelling from Lazarus)?

>> [...] What do you get when running the following test program (you can 
>> simulate the same conditions e.g. by naming the resulting binary 
>> fpc.exe and configuring Lazarus to use this "compiler"):
>> uses
>>   Windows;
>> begin
>>   WriteLn (GetACP);
>>   WriteLn (GetConsoleCP);
> ACP is 1252
> ConsoleCP 437

Just to be sure - you get this when running the test from Lazarus as a 
"compiler" (as suggested in my note above)?


More information about the fpc-devel mailing list