Re: PQexecPrepared() question - Mailing list pgsql-general

From Peter J. Holzer
Subject Re: PQexecPrepared() question
Date
Msg-id 6uz5ppdgqhlovw3df2dmzgzrfbfmmy5pys37ln7u4kyidaftgo@gxgkvkbwk3zh
Whole thread Raw
In response to Re: PQexecPrepared() question  (Tom Lane <tgl@sss.pgh.pa.us>)
Responses Re: PQexecPrepared() question
List pgsql-general
On 2025-12-21 00:39:23 -0500, Tom Lane wrote:
> Igor Korot <ikorot01@gmail.com> writes:
> > I added the following code in my app:
> >     res = PQexec( m_db, "SHOW client_encoding" );
> >     auto value = PQgetvalue( res, 0, 0 );
> >     PQclear( res );
> > and the value of the "value" variable is "UTF8".
>
> Okay ...
>
> > The exact error message is:
> > ERROR: invalid byte sequence for encoding UTF8: 0xdf
> > CONTEXT: unnamed portal parameter $1
> > on the INSERT.
>
> client_encoding governs both the encoding that the server will
> send, and the encoding that it expects to receive.  You are
> sending a parameter string that is not valid UTF8.

As I see it, Igor has two options:

1) Send UTF8. wcstombs is the wrong tool for this, since it uses the
   current locale which is obviously not using UTF-8. I don't program in
   C++, but I'm pretty sure there is a portable way to encode a string
   in UTF-8.
2) Figure out which encoding his locale is using and then set
   client_encoding appropriately. The first step to do that is to find
   the current locale.
   Igor, add
        #include <ctype.h>
        ...
        char *current_locale = setlocale(LC_CTYPE, "");
   to your code. What's the value of current_locale?

I think 1) is the better strategy, but them I've been a UTF-8 fan-boy
for over 30 years ;-).

        hjp

--
   _  | Peter J. Holzer    | Story must make more sense than reality.
|_|_) |                    |
| |   | hjp@hjp.at         |    -- Charles Stross, "Creative writing
__/   | http://www.hjp.at/ |       challenge!"

Attachment

pgsql-general by date:

Previous
From: Igor Korot
Date:
Subject: Re: PQexecPrepared() question
Next
From: Igor Korot
Date:
Subject: Re: PQexecPrepared() question