Обсуждение: Error on Windows

Поиск
Список
Период
Сортировка

Error on Windows

От
Igor Korot
Дата:
Hi, ALL,
The following code compiles and executes but returns an error:

[quote]
Invalid byte sequence for encoding UTF8
[/quote]

[code]
    char *values[2];
    values[0] = NULL, values[1] = NULL;
    values[0] = new char[schemaName.length() + 1];
    values[1] = new char[tableName.length() + 1];
    memset( values[0], '\0', schemaName.length() + 1 );
    memset( values[1], '\0', tableName.length() + 1 );
    strcpy( values[0], m_pimpl->m_myconv.to_bytes( schemaName.c_str()
).c_str() );
    strcpy( values[1], m_pimpl->m_myconv.to_bytes( tableName.c_str()
).c_str() );
    int len1 = (int) schemaName.length();
    int len2 = (int) tableName.length();
    int length[2] = { len1, len2 };
    int formats[2] = { 1, 1 };
    PGresult *res = PQexecParams( m_db, m_pimpl->m_myconv.to_bytes(
query.c_str() ).c_str(), 2, NULL, values, length, formats, 1 );
    ExecStatusType status = PQresultStatus( res );
    if( status != PGRES_COMMAND_OK && status != PGRES_TUPLES_OK )
    {
        result = 1;
        std::wstring err = m_pimpl->m_myconv.from_bytes(
PQerrorMessage( m_db ) );
        errorMsg.push_back( L"Error executing query: " + err );
        PQclear( res );
    }
[/code]

in the "err" variable.

Looking under MSVC debugger I see for a tableName a following sequence:

97 98 99 223

What can I do to eliminate the error?

Thank you.


Re: Error on Windows

От
Laurenz Albe
Дата:
Igor Korot wrote:
> The following code compiles and executes but returns an error:
> 
> [quote]
> Invalid byte sequence for encoding UTF8
> [/quote]
> 
> [code]
>     char *values[2];
>     values[0] = NULL, values[1] = NULL;
>     values[0] = new char[schemaName.length() + 1];
>     values[1] = new char[tableName.length() + 1];
>     memset( values[0], '\0', schemaName.length() + 1 );
>     memset( values[1], '\0', tableName.length() + 1 );
>     strcpy( values[0], m_pimpl->m_myconv.to_bytes( schemaName.c_str()
> ).c_str() );
>     strcpy( values[1], m_pimpl->m_myconv.to_bytes( tableName.c_str()
> ).c_str() );
>     int len1 = (int) schemaName.length();
>     int len2 = (int) tableName.length();
>     int length[2] = { len1, len2 };
>     int formats[2] = { 1, 1 };
>     PGresult *res = PQexecParams( m_db, m_pimpl->m_myconv.to_bytes(
> query.c_str() ).c_str(), 2, NULL, values, length, formats, 1 );
>     ExecStatusType status = PQresultStatus( res );
>     if( status != PGRES_COMMAND_OK && status != PGRES_TUPLES_OK )
>     {
>         result = 1;
>         std::wstring err = m_pimpl->m_myconv.from_bytes(
> PQerrorMessage( m_db ) );
>         errorMsg.push_back( L"Error executing query: " + err );
>         PQclear( res );
>     }
> [/code]
> 
> in the "err" variable.
> 
> Looking under MSVC debugger I see for a tableName a following sequence:
> 
> 97 98 99 223
> 
> What can I do to eliminate the error?

I'd say you should set the client encoding correctly.

Looks like the bytes represent "abcß" in some LATIN-? encoding.

Yours,
Laurenz Albe

-- 
Cybertec | https://www.cybertec-postgresql.com