Domanda

Sto sviluppando un'applicazione che dovrebbe funzionare in diverse lingue (tedesco, spagnolo, ecc.). L'applicazione utilizza un DB Oracle. Ho processi aziendali CRUD e ho le viste standard (creare, modificare, mostrare, elencare). Nessun problema per la creazione, la visualizzazione e l'elenco di qualsiasi record contenente caratteri speciali come ä, ö, ü, ecc. Ma quando modifico qualsiasi voce contenente uno di questi caratteri, ottengo la codifica versione. cioè     & Amp; auml; invece di ä     & Amp; ouml; invece di ö     & Amp; uuml; anziché ü

e così via.

Qualche suggerimento su come risolvere questo problema?

Grazie!

UPDATE Grazie per l'aiuto. Descriverò lo scenario completo:

Ho un'applicazione web scritta in grails (groovy on grails). Per lo sviluppo sto usando Jetty come server e Oracle 10g. Per i test e la produzione sto usando Tomcat 6.0.18 e Oracle 10g La versione Java è 1.6.0_02

Ho molti processi CRUD (creare, recuperare, aggiornare, eliminare). L'applicazione è multilingue. Cioè, ä, ö, ü, ß, á, é, í, ó, ú le lettere (caratteri) devono essere consentite come contenuto.

Le viste sono scritte in gsp. Sto usando le viste standard .gsp (creare, modificare, mostrare, elencare). Nessun problema con crea, mostra, elenca. Cioè, se nella vista di creazione digito qualsiasi parola che utilizza questi caratteri speciali verrà mostrata o elencata correttamente sotto show.gsp o list.gsp

Il problema sorge quando si modifica un record contenente tali caratteri. Invece di dire -let- ä appare nel campo un & amp; auml; (questa è la codifica html di ä).

Ho le seguenti impostazioni:

in Config.groovy     grails.views.gsp.encoding = " UTF-8 "     grails.converters.encoding = " UTF-8 "

Ogni pagina .gsp ha il seguente meta tag:

 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" pageEncoding="UTF-8"/>

Ogni modulo ha il seguente attributo:

<g:form accept-charset="UTF-8" method="post" >

In Tomcat ho eseguito le seguenti impostazioni.

tomcat viene avviato con le seguenti opzioni:

CATALINA_OPTS=-Dfile.encoding=UTF-8
JAVA_OPTS="-Duser.language=de -Duser.country=DE"

In web.xml ho impostato il seguente filtro

 <filter>
   <filter-name>SetCharacterEncoding</filter-name>
   <filter-class>filters.SetCharacterEncodingFilter</filter-class>
   <init-param>
       <param-name>encoding</param-name>
       <param-value>UTF-8</param-value>
   </init-param>
 </filter>

In myApplication / WEB-INF / classes / filters ho copiato SetCharacterEncodingFilter.class dagli esempi / WEB-INF / classes / filters

In server.xml ho impostato il seguente connettore:

 <Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443" URIEncoding="UTF-8" useBodyEncodingForURI="UTF-8" />

Lo scenario è il seguente: Il server riceve una richiesta di modifica di un modulo. Il server sta recuperando le informazioni dal DB e quindi sta inviando il database le informazioni sono già codificate html (non credo) o il server sta codificando e inviandolo codificato al client.

Inoltre, sul mio controller vedo che le informazioni recuperate dal server non lo sono HTML codificato.

Non so quale impostazione debba essere eseguita per far fronte a questo problema di codifica (che mi sta prendendo molto, molto tempo e fatica).

Grazie mille in anticipo.

Luis

È stato utile?

Soluzione 2

Oltre a tutte le impostazioni già fatte. Ho impostato:

grails.views.default.codec="html" // none, html, base64

invece di nessuno e il problema è risolto.

Il mio problema era già stato esposto qui: http: // www. groovy-forum.de/read.php?3,5008,5630

Per ulteriori informazioni, consultare:

http://jira.codehaus.org/browse/GRAILS-1827

Luis

Altri suggerimenti

la codifica è un problema difficile perché non puoi sempre fidarti di ciò che vedi. Di solito è sufficiente usare utf-8 per risolvere il problema. Assicurati di usarlo ovunque, comunque - oracle server, oracle client (jdbc), file groovy, ecc. Tieni presente che java usa utf-16. Il driver jdbc dovrebbe fare questa conversione per te. Il miglior consiglio da dare è che java (e quindi groovy) fanno esattamente quello che dicono di fare quando si tratta di codificare i caratteri, quindi il problema non c'è. Assicurarsi di disporre di strumenti che consentano di esaminare i bit effettivi (valore esadecimale) per ciascun aspetto del sistema. In mysql - è solo hex: http://dev.mysql.com/doc/ refman / 5.0 / it / string-functions.html # function_hex .
Suppongo che l'oracolo abbia una funzione simile. Assicurati di nuovo che il tuo client sia configurato per usare utf-8. Sono stato bruciato da quello prima. Per esaminare i file di origine (o file di registro) utilizzare qualcosa come xxd o od. Se stai usando cygwin, assicurati di attivare utf8 (nel menu font vt). Se sei su Windows e non stai usando Cygwin, dovresti assolutamente provarlo (assicurati di usare la versione x).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top