pg.ddx.io pgsql-it-generale@postgresql.org mailing list archive
help / color / mirror / Atom feedproblema Cinese in DB UTF8
3+ messages / 2 participants
[nested] [flat]
* problema Cinese in DB UTF8
@ 2013-08-02 15:17 ciifrancesco@tiscali.it <ciifrancesco@tiscali.it>
0 siblings, 1 reply; 3+ messages in thread
From: ciifrancesco@tiscali.it @ 2013-08-02 15:17 UTC (permalink / raw)
To: 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/
--
Sent via pgsql-it-generale mailing list (pgsql-it-generale@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-it-generale
^ permalink raw reply [nested|flat] 3+ messages in thread
* Re: problema Cinese in DB UTF8
@ 2013-08-02 15:40 Gianni Ciolli <gianni.ciolli@2ndquadrant.it>
parent: ciifrancesco@tiscali.it <ciifrancesco@tiscali.it>
0 siblings, 0 replies; 3+ messages in thread
From: Gianni Ciolli @ 2013-08-02 15:40 UTC (permalink / raw)
To: pgsql-it-generale
Ciao Francesco,
On Fri, Aug 02, 2013 at 05:17:05PM +0200, ciifrancesco@tiscali.it wrote:
> Salve a tutti, scrivo per la prima volta.
Premetto che non ho molta esperienza di uso di caratteri cinesi;
tuttavia la connessione sembra corretta.
Potresti mostrare il codice C++ che costruisce ed esegue la query?
Ciao,
Dr. Gianni Ciolli - 2ndQuadrant Italia
PostgreSQL Training, Services and Support
gianni.ciolli@2ndquadrant.it | www.2ndquadrant.it
PGDay 2013 - 7° Conferenza Italiana su PostgreSQL
Prato, 25 ottobre 2013 | http://2013.pgday.it/
--
Sent via pgsql-it-generale mailing list (pgsql-it-generale@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-it-generale
^ permalink raw reply [nested|flat] 3+ messages in thread
* problema Cinese in DB UTF8
@ 2013-08-05 11:09 ciifrancesco@tiscali.it <ciifrancesco@tiscali.it>
0 siblings, 0 replies; 3+ messages in thread
From: ciifrancesco@tiscali.it @ 2013-08-05 11:09 UTC (permalink / raw)
To: pgsql-it-generale
[riscrivo perché per sbaglio non l'ho inviata alla lista]
Gentile Dr. Gianni Ciolli,
ringrazio per la risposta, e mi scuso per il ritardo con cui riscrivo
(dovuto alla impossibilità di accedere al codice in questi giorni).
Ricostruisco la funzione che esegue la query eliminando come al solito
il codice di controllo. Rispetto alla volta scorsa ho aggiunto le righe
che sono marcate con T1 e T2, ma senza successo.
Tali righe le ho trovate in questo interessantissimo programma basato
sul giapponese
http://winpg.jp/~saito/PGSQL_SJIS
che purtroppo ancora non mi ha aiutato a risolvere. Una cosa
interessante sembrerebbe l'uso di wchar che ancora devo implementare.
Intanto dò la funzione come è adesso:
bool
EseguiIstruzioneSQL(const char *sqlQuery)
{
m_dbHandle =
PQconnectdb(conninfo); //puntatore a PGconn
//
m_dbHandle->set_client_encoding( "UTF8" ); // T1 non
funziona
PQsetClientEncoding(m_dbHandle,
"UTF-8"); // T2 apparentemente non ha effetto
PGresult *risultatoQuery;
risultatoQuery =
PQexec(m_dbHandle, sqlQuery);
statoQ = PQresultStatus(risultatoQuery);
//(controlli per poter fare il return...)
return true;
}
Saluti,
Francesco
----Messaggio originale----
Da: gianni.ciolli@2ndquadrant.it
Data: 02/08/2013 17.40
A: <pgsql-it-generale@postgresql.org>
Ogg: Re: [pgsql-it-generale] problema Cinese in DB UTF8
Ciao Francesco,
On Fri, Aug 02, 2013 at 05:17:05PM +0200, ciifrancesco@tiscali.it wrote:
> Salve a tutti, scrivo per la prima volta.
Premetto che non ho molta esperienza di uso di caratteri cinesi;
tuttavia la connessione sembra corretta.
Potresti mostrare il codice C++ che costruisce ed esegue la query?
Ciao,
Dr. Gianni Ciolli - 2ndQuadrant Italia
PostgreSQL Training, Services and Support
gianni.ciolli@2ndquadrant.it | www.2ndquadrant.it
PGDay 2013 - 7° Conferenza Italiana su PostgreSQL
Prato, 25 ottobre 2013 | http://2013.pgday.it/
--
Sent via pgsql-it-generale mailing list (pgsql-it-generale@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-it-generale
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/
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/
^ permalink raw reply [nested|flat] 3+ messages in thread
end of thread, other threads:[~2013-08-05 11:09 UTC | newest]
Thread overview: 3+ messages (download: mbox mbox.gz follow: Atom feed)
-- links below jump to the message on this page --
2013-08-02 15:17 problema Cinese in DB UTF8 ciifrancesco@tiscali.it <ciifrancesco@tiscali.it>
2013-08-02 15:40 ` Gianni Ciolli <gianni.ciolli@2ndquadrant.it>
2013-08-05 11:09 problema Cinese in DB UTF8 ciifrancesco@tiscali.it <ciifrancesco@tiscali.it>
This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox