2012-06-18 8 views
9

Ich habe versucht, dieses Problem für ca. 7 Stunden zu lösen.Zeichencodierungsproblem mit Tomcat

gibt es seltsame Zeichencodierung. Ich verwende JSP (JSTL) und Struts mit Tomat 6.

ich meine JSP-Seite-Codierung als solche haben:

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

Das Problem ist, wenn ich versuche, die URL zu übergeben mit encodeURI als solche:

<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> 

der Parameter auf die Aktion (Java-Ende) kommt als: Gaz MÃ © tro

jedoch am vorderen Ende als angezeigt wird: G az Métro

, die der richtige Weg ist (Gaz Métro) ...

eine Ahnung, was ich tun kann ??

+2

sein Wo sehen Sie den Wert auf sehen das Java-Ende? In der Protokolldatei? Wenn ja, kann es sein, dass der Editor, den Sie zum Lesen der Protokolldatei verwenden, UTF-8 nicht erwartet ... – atk

Antwort

1

Versuchen Sie, den URIEncoding Parameter Ihres Katers-Anschluss (in der server.xml) auf UTF-8 Einstellung:

Z. B .:

<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

danke für den Vorschlag ... Ich habe dies vor dem Posten versucht, das Problem nicht gelöst. – OakvilleWork

+0

Dies hat nichts mit der Ausgabecodierung zu tun. Es betrifft nur Werte, die von einem Client gelesen werden, und nur für GET-Parameterwerte. –

6

Haben Sie diese Schritte befolgt?

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

unten kopiert:

Verwendung von UTF-8 als Zeichenkodierung für alles, was eine sichere Wette ist. Dies sollte für fast jede Situation funktionieren.

Um vollständig zu wechseln mit UTF-8, müssen Sie folgende Änderungen vornehmen:

  1. Set URIEncoding = "UTF-8" auf der in server.xml. Referenzen: HTTP-Konnektor, AJP-Konnektor.

  2. Zeichenkodierung Filter mit der Standard-Kodierung UTF-8

  3. ändern alle JSPs auf charset Namen in ihre content aufzunehmen.

    Verwenden Sie beispielsweise <%@page contentType="text/html; charset=UTF-8" %> für die üblichen JSP-Seiten und <jsp:directive.page contentType="text/html; charset=UTF-8" /> für die Seiten in XML-Syntax (auch bekannt als JSP-Dokumente).

  4. Ändern Sie alle Servlets, um den Inhaltstyp für Antworten festzulegen und den Zeichensatznamen im Inhaltstyp UTF-8 hinzuzufügen.

    Verwenden Sie response.setContentType("text/html; charset=UTF-8") oder response.setCharacterEncoding("UTF-8").

  5. Ändern Sie alle von Ihnen verwendeten Bibliotheken zur Inhaltsgenerierung (Velocity, Freemarker usw.), um UTF-8 zu verwenden, und geben Sie UTF-8 im Inhaltstyp der von ihnen generierten Antworten an.

  6. Deaktivieren Sie alle Ventile oder Filter, die Request-Parameter lesen können, bevor Ihr Zeichencodierungsfilter oder Ihre jsp-Seite die Codierung auf UTF-8 setzen kann. Weitere Informationen finden Sie unter http://www.mail-archive.com/[email protected]/msg21117.html.

+0

danke so viel Paul ... Ich habe alle oben genannten versucht .. immer noch kein Glück, ich habe versucht, eine Lösung zu finden, ich habe sogar Lösungen vorgeschlagen, um UTF-8 manuell zu kodieren! Ich möchte diese Option jedoch nicht verwenden ... im Grunde ist dieser Beitrag meinem Problem ähnlich: http://stackoverflow.com/questions/6213377/handle-french-characters-in-java jedoch diese Vorschläge don ' t arbeiten entweder. – OakvilleWork

+0

Ich habe ** 6 ** gesehen, die dafür verantwortlich sind, dass WebSphere Portal Server verwendet wird. Versuchen Sie jede Anforderung nachzuverfolgen, und wenn * irgendetwas * versucht, einen Anforderungsparameter zu lesen, bevor die richtige Kodierung eingestellt ist, wird der Wert als ISO8859-1 gelesen (wenn ich mich richtig erinnere, ist dies in der Servlet-Spezifikation angegeben). –

10

Sie folgende

1) HTML-Code

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

2) Browser-Einstellung für IE View - Encoding - Unicode (UTF-8)

3) Tomcat Server server.xml - In Connector-Tag hinzugefügt "URIncoding" -Attribut als

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

catalina.sh/catalina.bat - hinzugefügt

folgende
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) MIME-Typ der Antwort sollte "application/x-www-form-urlencoded"

+0

Ich habe nach einem Tag gesucht, um das aussortiert zu bekommen. An Jetty funktionierte alles prima, aber als ich zum Kater kam, verschwanden meine Umlaute. Vielen Dank! – Will