pg.ddx.io  pgsql-it-generale@postgresql.org mailing list archive  
help / color / mirror / Atom feed
problema 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>
  2013-08-02 15:40 ` Re: problema Cinese in DB UTF8 Gianni Ciolli <gianni.ciolli@2ndquadrant.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:17 problema Cinese in DB UTF8 ciifrancesco@tiscali.it <ciifrancesco@tiscali.it>
@ 2013-08-02 15:40 ` Gianni Ciolli <gianni.ciolli@2ndquadrant.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