pg.ddx.io  pgsql-it-generale@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: ciifrancesco@tiscali.it <ciifrancesco@tiscali.it>
To: pgsql-it-generale@postgresql.org
Subject: problema Cinese in DB UTF8
Date: Fri, 2 Aug 2013 17:17:05 +0200 (CEST)
Message-ID: <23105094.91481375456625220.JavaMail.defaultUser@defaultHost> (raw)
List-Unsubscribe:  <mailto:majordomo@postgresql.org?body=unsub%20pgsql-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



view thread (3+ messages)  latest in thread

Message-ID: <23105094.91481375456625220.JavaMail.defaultUser@defaultHost>
Permalink:  ../23105094.91481375456625220.JavaMail.defaultUser@defaultHost/
Also on:    postgresql.org/message-id/23105094.91481375456625220.JavaMail.defaultUser@defaultHost

 · 

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-it-generale@postgresql.org
  Cc: ciifrancesco@tiscali.it
  Subject: Re: problema Cinese in DB UTF8
  In-Reply-To: <23105094.91481375456625220.JavaMail.defaultUser@defaultHost>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

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