2012-06-18 9 views
9

Ho cercato di risolvere questo problema per circa 7 ore.Problema di codifica dei caratteri con Tomcat

c'è una codifica di caratteri strana in corso. Sto usando JSP (JSTL) e Struts con Tomat 6.

ho la mia pagina JSP codifica in quanto tale:

<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> 

Il problema è quando provo a passare l'url usando encodeURI come tale:

<script type="text/javascript"> 
      $('#mailer_filter').change(function(){ 
      var val = $(this).val(); 
      console.log(val); 
      console.log(escape(val)); 
      console.log(encodeURI(val)); 
      location.href = 'mailList.a?' + encodeURI($(this).val()); 
      }); 
     </script> 

il parametro sull'azione (fine java) viene fuori come: Gaz MÃ © tro

tuttavia sul front-end viene visualizzato come: G az Métro

che è il modo corretto (Gaz Métro) ...

idea di quello che posso fare questo ??

+2

Dove si vede il valore sul la fine di Java? Nel file di registro? Se è così, potrebbe essere che l'editor che stai usando per leggere il file di log non si aspetta UTF-8 ... – atk

risposta

1

Prova a impostare il parametro URIEncoding del connettore Tomcat (nel server.xml) a UTF-8:

Es .:

<Connector port="8080" maxHttpHeaderSize="8192" 
      maxThreads="150" minSpareThreads="25" maxSpareThreads="75" 
      enableLookups="false" redirectPort="8443" acceptCount="100" 
      connectionTimeout="20000" disableUploadTimeout="true" 
      URIEncoding="UTF-8"/> 
+0

grazie per il suggerimento ... Ho provato questo prima di postare, non ha risolto il problema. – OakvilleWork

+0

Questo non ha nulla a che fare con la codifica dell'output. Influirà solo sui valori letti da un client e solo per i valori dei parametri GET. –

6

Avete seguito questi passi?

http://wiki.apache.org/tomcat/FAQ/CharacterEncoding#Q8

Copiato di seguito:

Usare UTF-8 come codifica dei caratteri per ogni cosa è una scommessa sicura. Questo dovrebbe funzionare praticamente per ogni situazione.

Al fine di passare completamente a utilizzare UTF-8, è necessario effettuare le seguenti modifiche:

  1. Set URIEncoding = "UTF-8" sul vostro in server.xml. Riferimenti: connettore HTTP, connettore AJP.

  2. utilizzare un filtro di codifica dei caratteri con la codifica di default impostato su UTF-8

  3. cambiare tutte le tue JSP di includere il nome charset nella loro contentType.

    Ad esempio, utilizzare <%@page contentType="text/html; charset=UTF-8" %> per le solite pagine JSP e <jsp:directive.page contentType="text/html; charset=UTF-8" /> per le pagine nella sintassi XML (ovvero Documenti JSP).

  4. Modificare tutti i servlet per impostare il tipo di contenuto per le risposte e includere il nome charset nel tipo di contenuto in UTF-8.

    Utilizzare response.setContentType("text/html; charset=UTF-8") o response.setCharacterEncoding("UTF-8").

  5. Modificare le librerie di generazione contenuto utilizzate (Velocity, Freemarker, ecc.) Per utilizzare UTF-8 e specificare UTF-8 nel tipo di contenuto delle risposte generate.

  6. Disattivare eventuali valvole o filtri che possono leggere i parametri di richiesta prima che il filtro di codifica dei caratteri o la pagina jsp abbia la possibilità di impostare la codifica su UTF-8. Per ulteriori informazioni, vedere http://www.mail-archive.com/[email protected]/msg21117.html.

+0

grazie mille Paul ... ho provato tutto quanto sopra .. ancora senza fortuna, ho cercato di trovare una soluzione, ho persino visto le soluzioni suggerite per la codifica in UTF-8 manualmente! Non voglio usare questa opzione però ... in pratica questo post è simile al mio problema: http://stackoverflow.com/questions/6213377/handle-french-characters-in-java tuttavia questi suggerimenti non anche lavorare. – OakvilleWork

+0

Ho visto ** 6 ** responsabile di questo "in the wild", utilizzando WebSphere Portal Server. Prova e traccia ogni richiesta e, se * qualsiasi * tenta di leggere un parametro di richiesta prima che venga impostata la codifica corretta, il valore verrà letto come ISO8859-1 (se non ricordo male, questo è specificato nelle specifiche del servlet). –

10

Fare seguente

1) HTML Codice

<meta contentType="text/html; charset="UTF-8"/> 

2) Browser Impostazione per IE View - Codifica - Unicode (UTF-8)

3) Tomcat Server server.xml - Nel tag Connector è stato aggiunto l'attributo "URIEncoding" come

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

catalina.sh/catalina.bat - ha aggiunto in seguito

set JAVA_OPTS=--Xms256m -Xmx1024m -Xss268k -server -XX:MaxPermSize=256m -XX:-UseGCOverheadLimit -Djava.awt.headless=true -Djavax.servlet.request.encoding=UTF-8 -Dfile.encoding=UTF-8 

set CATALINA_OPTS=-Dfile.encoding="UTF-8" 

4) tipo MIME di risposta dovrebbe essere "application/x-www-form-urlencoded"

+0

Ho cercato un giorno per risolvere il problema. Tutto ha funzionato bene su Jetty, ma quando si distribuiva per domare le mie dieresi stavano scomparendo. Grazie! – Will