Newsgroup: it.comp.java
Titolo: problemi inserimento dati formattati nel database

Salve,
utilizzo una piattaforma jdk 1.4.2 Tomcat 5 e SQL Server.
Ho realizzato un applicativo con jsp e servlet  in grado di inserire
articoli  in una tabella di tipo ntext di  SQL Server.
L'articolo viene scritto utilizzando MS World e copiato all'interno della
textarea di una jsp, quando viene salvato e visualizzato successivamente
compaiono nel testo caratteri non validi .
Ad esempio se scrivo in world :
"Testo di prova con caratteri speciali ù à ì"
copio questi dati in una textarea (progetto WYSIWYG HTML editor ) salvo
utilizzando nel database driver jdbc
nel database trovo:
<SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman';
mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: IT;
mso-fareast-language: IT; mso-bidi-language: AR-SA">?Testo di prova con
caratteri speciali ? ? ?</SPAN>
ed in fase di visualizzazzione tramite jsp ho il messaggio "sporco" di
questo tipo:
?Testo di prova con caratteri speciali ? ?
Come posso inserire correttamente questi dati nel database ed estrarli
successivamente in formato adatto per la visualizzazione in una pagina html?
Vi ringrazio anticipatamente per il vostro aiuto!
Franz.

Immagino tu usi il copia e incolla.
Il problema è che in html le lettere accentate non vengono sempre
interpretate regolarmente. In effetti il modo corretto di scrivere (ad
esempio) la "à" è "&agrave".
Però, secondo me, è il passaggio da textarea a html che sbaglia.
Puoi spiegare come il testo "diventa" html?

 ha scritto nel messaggio
news:1133252844....@g43g2000cwa.googlegroups.com...
Prima di tutto, grazie per l'aiuto!
Immagino tu usi il copia e incolla.
Si, l'utente che utilizza l'applicativo usa il "copia e incolla"
Il problema è che in html le lettere accentate non vengono sempre
interpretate regolarmente. In effetti il modo corretto di scrivere (ad
esempio) la "à" è "&agrave".
Però, secondo me, è il passaggio da textarea a html che sbaglia.
Puoi spiegare come il testo "diventa" html?
In effetti con il "copia incolla", l'utente importa le lettere e gli stili
definiti in word.
L'Html editor utilizzato nella mia jsp e' HtmlArea 
www.htmlarea.com
 ,
se richiamo la funzione View HTML il testo precedentemente inserito assume
questa formattazione:
<SPAN
style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman';
mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: IT;
mso-fareast-language: IT; mso-bidi-language: AR-SA">"Testo
di prova con caratteri speciali : ù à ì"</SPAN>
Non è codificato in html.
Per la visualizzazione della pagina ho settato questi parametri nel codice
della jsp:
<%@ page contentType="text/html; charset=UTF-8" %>
request.setCharacterEncoding("UTF-8");
questi parametri nell'html :
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
L'inserimento dei dati nel database lo eseguo in questo modo:
String testo = new String(miaStringa.getBytes("US-ASCII"));
String testoMod = new String(testo.getBytes(),"UTF8");
cstmt.setString(1,testoMod);
E' corretto?

 E' corretto?
Non capisco (e questo non vuol dire che sia sbagliata) questa procedura
di estrazione dell'informazione. Quello che però alla fine vedo è che
salvi il testo in un campo (del DB) di testo che in genere ha dei
limiti di lunghezza abbastanza stringenti. Io uso un Clob. Verifica se
il tuo DB gestisce questo tipo di campo.

 ha scritto nel messaggio
news:1133258761.0...@g49g2000cwa.googlegroups.com...




L'inserimento nel database SQL Server avviene tramite una stored procedure.
Il campo della tabella dove finisce il dato è di tipo NTEXT .
procedura  cstmt.setString
riferimento all'oggetto CallableStatement
Non posso cambiare il formato del campo perche' nello stesso scrive anche
una funzione scritta in ASP.
E' strano, come con il copia incolla da Word utilizzando un HTML Editor in
una pagina ASP permetta di inserire nello stesso campo dello stesso database
il dato formattato correttamente. Se inserisco prima il dato tramite la
pagina ASP e successivamente eseguo una select tramite "SQL Query Analyzer"
visualizzo il testo formattato correttamente : "Testo di prova con caratteri
speciali : ù à ì".
Anche la visualizzazione del testo precedentemente inserito nel database in
una seconda pagina ASP è corretta.
Nella pagina ASP non viene eseguita nessuna replace in javascript delle
lettere accentate.
L'oggetto HttpServletRequest request presente nella servlet che legge la
stringa  "Testo di prova con caratteri speciali : ù à ì" inserita nell' HTML
Area della mia jsp mi da questo output in console:
<SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman';
mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: IT;
mso-fareast-language: IT; mso-bidi-language: AR-SA">"Testo di prova con
caratteri speciali ù à ì"</SPAN>
Potrebbe dipendere dalla conversione della stringa prima in US-ASCII e
successivamente in UTF8 prima di salvarla nel database?
Se dipende da questo, come dovrebbe essere eseguito l'inserimento e la
successiva lettura?
Grazie.


Sì, in base a quanto dici il problema allora non è lato client.
E' chiaro che dipende da una di queste due istruzioni:
String testo = new String(miaStringa.getBytes("US-ASCII"));
String testoMod = new String(testo.getBytes(),"UTF8");
Ora, al di là del fatto che capire qual è delle due (basta una
println), puoi sempre effettuare un
miaStringa = miaStringa.replaceAll("à","&agrave"); // per tutte le
lettere
prima di ricavare la variabile testo.