Newsgroup: it.comp.java
Titolo: Charset e Database

Salve a tutti !
Ripropongo quello che è sicuramente un annoso problema con il quale
moti di noi si sono scontrati: la gestione dei character encoding.
Ho un'applicazione J2EE che legge e scrive da DB Postgresql,
utilizzando Hibernate3 come framework per la gestione della
persistenza.
Dal lato applicativo, utilizzo l'encoding UTF-8 per leggere la Request,
scrivere la Response, e nei meta-tag di ogni pagina. E tutto fila
liscio, nel senso che posso trattare senza problemi i varii caratteri
accentate, lettere con l'umlaut, simboli di euro e così via.
Mi sono accorto però che accedendo ad DB dell'applicazione mediante il
client di postgresql, così come mediante altro client (Aqua Data
Studio per la precisione), non riesco a visualizzare correttamente i
caratteri speciali. Questo benchè abbia impostato UTF-8 sia come
encoding per il mio database (opzione di postgresql in fase di
creazione) sia per il client postgresql che sto utilizzando.
Dal momento che applicativamente tutto fila, che cioè leggo e scrivo
senza problemi da e su DB, ottenendo sempre visualizzazioni corrette,
direi che si tratta più che altro di una curiosità: c'è modo di
conciliare il corretto funzionamento dell'applicazione con la corretta
visualizzazione dei caratteri speciali in caso di utilizzo di un client
diverso dalla mia applicazione ?
Pie.

Sì...facendoti un tuo client del db....:-)
Oppure andando sul sito di postresql e ponendo lì il problema...
Scusami se scherzo ma il problema non mi pare avere a che fare con
java.

amico fragile wrote:

Un argomento analogo e' stato affrontato qualche settimana fa.
Ti riposto la risposta che diedi a suo tempo, sperando
che ti possa essere d'aiuto.
Ciao
Roberto
//---- INIZIO CITAZIONE ----//
 > Salve.
 > Ho fatto girare la mia applicazione java sotto SUN OS 5.8.
 > Con due JVM diverse. Con la prima i caratteri accentati vengono scritti
 > correttamente, con la seconda (che è quella che devo usare) no.
 > C'è un modo per localizzare la seconda?
Cosa intendi quando scrivi: "i caratteri accentati vengono scritti"?
Scritti dove? Su file?
Da dove vengono letti i caratteri?
Te lo chiedo perche' ho avuto un problema analogo con una
applicazione che estraeva dati testuali da un db PostgreSQL
per riversarli poi su un file di testo dopo alcune
elaborazioni.
Nell'ambiente di test (Eclipse - WinXP) tutto funzionava
correttamente, ma quando facevo il deploy in produzione
(JVM Sun su Linux) le lettere accentate non venivano
scritte correttamente sul file.
La causa del malfunzionamento era la diversa configurazione
del charset sul db (LATIN1) e sul SO di produzione (UTF-8).
Problemi di questa natura li si possono risolvere almeno
in due diversi modi:
1) Modificare le impostazione del locale e del charset
     di default del SO su cui "gira" la JVM.
     Il modo di procedere dipende dal SO usato.
     Sotto linux si puo' provare ad impostare la variabile
     d'ambiente LANG nello script che lancia l'applicazione Java
     (ad esempio LANG=it_IT.LATIN1)
2) Modificare l'applicazione Java.
     Utilizzare per l'i/o di testo la classe OutputStreamWriter,
     la quale permette di impostare il charset utilizzato.
     (FileWriter usa invece quello di default del SO su cui
      gira la JVM)
Vedi a questo proposito:
http://java.sun.com/docs/books/tutorial/essential/io/filestreams.html
//---- FINE CITAZIONE ----//