problema Cinese in DB UTF8

From: "ciifrancesco(at)tiscali(dot)it" <ciifrancesco(at)tiscali(dot)it>
To: pgsql-it-generale(at)postgresql(dot)org
Subject: problema Cinese in DB UTF8
Date: 2013-08-02 15:17:05
Message-ID: 23105094.91481375456625220.JavaMail.defaultUser@defaultHost
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-it-generale

Salve a tutti, scrivo per la prima volta.

Sono bloccato da un poco di
giorni su un problema. Ho un programma C++ su Linux che si connette ad
una base PostgreSQL mediante la classe PGconn (http://www.postgresql.
org/docs/8.1/static/libpq.html#LIBPQ-CONNECT) e vi inserisce i dati che
prende da un file.
Ora, alcuni campi possono essere in lingue straniere
e contengono lettere e numeri. Quando il programma c++ inserisce tali
campi, tutti i caratteri non ASCII diventano dei quadratini vuoti.
Notare che il DB è in UTF-8, eseguendo manualmente le query, i
caratteri di qualsiasi lingua (ne ho provate parecchie) sono conservati
integri. Il problema deve essere nel programma, o nella connessione di
tale programma... non saprei.

Il programma in questione fornisce anche
un log, in cui posso vedere le query eseguite e controllare che siano
state inviate correttamente. In particolare nel log noto che le query
sono (in questo caso una select, ma è così per le update ecc.):
select
* from tabella where datoUTF8 = 'TESTO ASCII
<e5><8f><b0><27><20><41><4e><44><20><73><65><7a><69><6f><6e><65><20><3d><20><27><73><65><7a><27><3b>

Come potete notare, a partire dal primo carattere cinese (in questo
caso) tutto il resto della stringa viene scritto in esadecimale.
Tuttavia non dovrebbe essere un problema perché traducendo
l'esadecimale in lettere, ottengo la query perfetta:
select * from
tabella where datoUTF8 = 'TESTO ASCII 台' AND sezione = 'sez';

Invece
nel DB il carattere cinese mi appare come il solito quadratino vuoto �.

Tuttavia, il fatto che le tuple siano inserite significa che le query
sono eseguite senza errori, solo non capisco perché il carattere non
sia stato conservato integro.
Forse non so io dove impostare la
codifica, qualcuno ha un suggerimento? Io ho impostato UTF-8 dovunque
era possibile.

Codice con la connessione (ho eliminato il codice di
controllo)

altri_parametri->extract(0, altri_parametri->length(),
parametri, sizeof(parametri), "UTF8");
parametri[PARAMS_MAX_LENGTH >
altri_parametri->length() ? altri_parametri->length() :
PARAMS_MAX_LENGTH-1] = 0;
snprintf(conninfo,
CONNECTION_STRING_MAX_LENGTH, "dbname=%s user=%s password=%s %s",
dbPath, user, password, parametri);
m_dbHandle = PQconnectdb
(conninfo);

Grazie,
Francesco

Invita i tuoi amici e Tiscali ti premia! Il consiglio di un amico vale più di uno spot in TV. Per ogni nuovo abbonato 30 € di premio per te e per lui! Un amico al mese e parli e navighi sempre gratis: http://freelosophy.tiscali.it/

Responses

Browse pgsql-it-generale by date

  From Date Subject
Next Message Gianni Ciolli 2013-08-02 15:40:32 Re: problema Cinese in DB UTF8
Previous Message manno_it@libero.it 2013-03-12 23:56:02 PostsegreSQL 9.2 Recursive Queries