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/
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 |