Re: BUG #6510: A simple prompt is displayed using wrong charset - Mailing list pgsql-bugs

From Alexander LAW
Subject Re: BUG #6510: A simple prompt is displayed using wrong charset
Date
Msg-id 4F65A533.7090208@gmail.com
Whole thread Raw
In response to Re: BUG #6510: A simple prompt is displayed using wrong charset  (Alvaro Herrera <alvherre@commandprompt.com>)
Responses Re: BUG #6510: A simple prompt is displayed using wrong charset
List pgsql-bugs
I see two ways to resolve the issue.
First is to use CharToOemBuff when writing a string to the "con" and OemToCharBuff when reading an input from it.
The other is to always use stderr/stdin for Win32 as it was done for msys before. I think it's more straightforward.
I tested the attached patch (build the source with msvc) and it fixes the issue. If it looks acceptible, then probably DEVTTY should not be used on Windows at all.
I found two other references of DEVTTY at
psql/command.c
success = saveHistory(fname ? fname : DEVTTY, -1, false, false);

and
contrib/pg_upgrade/option.c
log_opts.debug_fd = fopen(DEVTTY, "w");

By the way, is there any reason to use stderr for the prompt output, not stdout?

Regards,
Alexander


16.03.2012 23:13, Alvaro Herrera пишет:
Excerpts from exclusion's message of sáb mar 03 15:44:37 -0300 2012:

I'm using postgresSQL in Windows with Russian locale and get unreadable
messages when the postgres utilities prompting me for input.
Please look at the screenshot:
http://oi44.tinypic.com/aotje8.jpg
(The psql writes the unreadable message prompting for the password.)
But at the same time the following message (WARINING) displayed right.

I believe it's related to setlocale and the difference between OEM and ANSI
encoding, which we had in Windows with the Russian locale.
The startup code of psql sets locale with the call setlocale(LC_ALL, "") and
MSDN documentation says that the call:
Sets the locale to the default, which is the user-default ANSI code page
obtained from the operating system.

After the call all the strings printed with the printf(stdout) will go
through  the ANSI->OEM conversion.

But in the simple_prompt function strings written to con, and such writes go
without conversion.
Were you able to come up with some way to make this work?


Attachment

pgsql-bugs by date:

Previous
From: "Mark M."
Date:
Subject: Re: BUG #6511: calling spi_exec_query from non-main package, results in: couldn't fetch $_TD
Next
From: prem tolani
Date:
Subject: Bug in postgresql 8.1