Re: Texinfo 7.2.90 build with mingw.org's MinGW: cleanups in Info

Eli Zaretskii <[email protected]>
Newsgroups gmane.comp.tex.texinfo.bugs
Message-ID <[email protected]>
> Date: Fri, 16 Jan 2026 15:31:42 +0100
> From: Patrice Dumas <[email protected]>
> Cc: [email protected], [email protected]
> 
> > > if (!defined($locale_encoding) and $^O eq 'MSWin32') {
> > >   eval 'require Win32::API';
> > >   if (!$@) {
> > >     Win32::API::More->Import("kernel32", "int GetACP()");
> > >     my $CP = GetACP();
> > >     if (defined($CP)) {
> > >       $locale_encoding = 'cp'.$CP;
> > 
> > Yes, but I would (a) import GetConsoleOutputCP as well, and (b) use
> > GetConsoleOutputCP in preference to GetACP, if the former returns
> > non-zero.  That's because on Windows it is possible to change the
> > encoding understood by the terminal independently of the system
> > locale's codeset (which is what GetACP returns).
> > 
> > Note that the preference of GetConsoleOutputCP is only for text that
> > will eventually be output to the terminal.  In other cases, such as
> > encoding/decoding of file names or decoding system messages and values
> > of environment variables, the value returned by GetACP is the right
> > one.
> 
> We already have different encodings set to the locale, but it is not
> completly clear to me where GetConsoleOutputCP or GetACP should be used.

You are right, this is tricky.

> Could you please correct and complete the following information:
> 
> * decode command-line, including file names passed on the command line
>   we would like to decode (sometime we do not decode file names) -> ?

Use the codepage returned by GetACP for thse.

> * decode environment variables (we do not decode file names
>   passed as environment variables in some cases) -> GetACP

Yes.

> * error and warning messages translations encoding -> GetACP

The messages are encoded in the codepage returned by GetACP.

> * encode command line before executing the command line -> ?

GetACP

> * error and warning messages output encoding -> GetConsoleOutputCP

Yes.  Basically, any text you write to the console.

> * encode input file names and output file names on the filesystem -> GetACP

Yes.

> Another information I would need is the equivalent in Perl of
> determining that the console page is UTF-8.  In C it is like:
>   UINT cp = GetACP ();
>   if (cp == CP_UTF8)
>     ....
> 
> What the (cp == CP_UTF8) comparison should be on the string returned by
> GetACP or GetConsoleOutputCP?

The value of CP_UTF8 is 65001, and both GetACP and GetConsoleOutputCP
return it when the corresponding encoding is UTF-8.  Both of these
functions return an integer, not a string.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.