Wie bringt man UTF-8 in Java-Webanwendungen zum Laufen?

367

Ich muss UTF-8 in meiner Java-Webanwendung (Servlets + JSP, kein Framework verwendet) zum Laufen bringen, um äöåusw. finnischen Text und kyrillische Alphabete wie in ЦжФSonderfällen zu unterstützen.

Mein Setup ist das folgende:

  • Entwicklungsumgebung: Windows XP
  • Produktionsumgebung: Debian

Verwendete Datenbank: MySQL 5.x.

Benutzer verwenden hauptsächlich Firefox2, aber auch Opera 9.x, FF3, IE7 und Google Chrome werden verwendet, um auf die Website zuzugreifen.

Wie erreicht man das?

kosoant
quelle

Antworten:

552

Wenn ich als FAQ dieser Website antworte, wird dies gefördert. Das funktioniert bei mir:

Meistens sind Zeichen äåö kein Problem, da der von Browsern und Tomcat / Java für Webapps verwendete Standardzeichensatz latin1 ist, d. H. ISO-8859-1, die diese Zeichen "versteht".

Damit UTF-8 unter Java + Tomcat + Linux / Windows + MySQL funktioniert, ist Folgendes erforderlich:

Konfigurieren der server.xml von Tomcat

Es muss konfiguriert werden, dass der Connector UTF-8 verwendet, um URL-Parameter (GET-Anforderung) zu codieren:

<Connector port="8080" maxHttpHeaderSize="8192"
 maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
 enableLookups="false" redirectPort="8443" acceptCount="100"
 connectionTimeout="20000" disableUploadTimeout="true" 
 compression="on" 
 compressionMinSize="128" 
 noCompressionUserAgents="gozilla, traviata" 
 compressableMimeType="text/html,text/xml,text/plain,text/css,text/ javascript,application/x-javascript,application/javascript"
 URIEncoding="UTF-8"
/>

Der Schlüsselteil ist URIEncoding = "UTF-8" im obigen Beispiel. Dies garantiert, dass Tomcat alle eingehenden GET-Parameter als UTF-8-codiert behandelt. Wenn der Benutzer Folgendes in die Adressleiste des Browsers schreibt:

 https://localhost:8443/ID/Users?action=search&name=*ж*

Das Zeichen ж wird als UTF-8 behandelt und als % D0% B6 (normalerweise vom Browser, bevor es überhaupt zum Server gelangt ) codiert .

POST-Anfragen sind davon nicht betroffen.

Zeichensatzfilter

Dann ist es Zeit, die Java-Webanwendung zu zwingen, alle Anforderungen und Antworten als UTF-8-codiert zu verarbeiten. Dies erfordert, dass wir einen Zeichensatzfilter wie folgt definieren:

package fi.foo.filters;

import javax.servlet.*;
import java.io.IOException;

public class CharsetFilter implements Filter {

    private String encoding;

    public void init(FilterConfig config) throws ServletException {
        encoding = config.getInitParameter("requestEncoding");
        if (encoding == null) encoding = "UTF-8";
    }

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain next)
            throws IOException, ServletException {
        // Respect the client-specified character encoding
        // (see HTTP specification section 3.4.1)
        if (null == request.getCharacterEncoding()) {
            request.setCharacterEncoding(encoding);
        }

        // Set the default response content type and encoding
        response.setContentType("text/html; charset=UTF-8");
        response.setCharacterEncoding("UTF-8");

        next.doFilter(request, response);
    }

    public void destroy() {
    }
}

Dieser Filter stellt sicher, dass UTF-8 festgelegt ist, wenn der Browser die in der Anforderung verwendete Codierung nicht festgelegt hat.

Die andere Aufgabe dieses Filters besteht darin, die Standardantwortcodierung festzulegen, d. H. die Kodierung, in der das zurückgegebene HTML / was auch immer ist. Die Alternative besteht darin, die Antwortcodierung usw. in jedem Controller der Anwendung festzulegen.

Dieser Filter muss der Datei web.xml oder dem Bereitstellungsdeskriptor der Webanwendung hinzugefügt werden:

 <!--CharsetFilter start--> 

  <filter>
    <filter-name>CharsetFilter</filter-name>
    <filter-class>fi.foo.filters.CharsetFilter</filter-class>
      <init-param>
        <param-name>requestEncoding</param-name>
        <param-value>UTF-8</param-value>
      </init-param>
  </filter>

  <filter-mapping>
    <filter-name>CharsetFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

Die Anweisungen zum Erstellen dieses Filters finden Sie im Tomcat-Wiki ( http://wiki.apache.org/tomcat/Tomcat/UTF-8 ).

JSP-Seitencodierung

Fügen Sie in Ihrer web.xml Folgendes hinzu:

<jsp-config>
    <jsp-property-group>
        <url-pattern>*.jsp</url-pattern>
        <page-encoding>UTF-8</page-encoding>
    </jsp-property-group>
</jsp-config>

Alternativ müssten auf allen JSP-Seiten der Webanwendung Folgendes angezeigt werden:

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

Wenn eine Art Layout mit verschiedenen JSP-Fragmenten verwendet wird, ist dies in allen erforderlich .

HTML-Meta-Tags

Die JSP-Seitencodierung weist die JVM an, die Zeichen auf der JSP-Seite in der richtigen Codierung zu behandeln. Dann ist es Zeit, dem Browser mitzuteilen, in welcher Codierung die HTML-Seite ist:

Dies geschieht oben auf jeder von der Webanwendung erstellten xhtml-Seite wie folgt:

   <?xml version="1.0" encoding="UTF-8"?>
   <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
   <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fi">
   <head>
   <meta http-equiv='Content-Type' content='text/html; charset=UTF-8' />
   ...

JDBC-Verbindung

Bei Verwendung einer Datenbank muss definiert werden, dass die Verbindung eine UTF-8-Codierung verwendet. Dies erfolgt in context.xml oder überall dort, wo die JDBC-Verbindung fehlerhaft ist, wie folgt:

      <Resource name="jdbc/AppDB" 
        auth="Container"
        type="javax.sql.DataSource"
        maxActive="20" maxIdle="10" maxWait="10000"
        username="foo"
        password="bar"
        driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/      ID_development?useEncoding=true&amp;characterEncoding=UTF-8"
    />

MySQL-Datenbank und -Tabellen

Die verwendete Datenbank muss UTF-8-Codierung verwenden. Dies wird erreicht, indem die Datenbank wie folgt erstellt wird:

   CREATE DATABASE `ID_development` 
   /*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_swedish_ci */;

Dann müssen alle Tabellen auch in UTF-8 sein:

   CREATE TABLE  `Users` (
    `id` int(10) unsigned NOT NULL auto_increment,
    `name` varchar(30) collate utf8_swedish_ci default NULL
    PRIMARY KEY  (`id`)
   ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_swedish_ci ROW_FORMAT=DYNAMIC;

Der Schlüsselteil ist CHARSET = utf8 .

MySQL Server Konfiguration

MySQL Serveri muss ebenfalls konfiguriert werden. In der Regel erfolgt dies unter Windows durch Ändern der Datei my.ini und unter Linux durch Konfigurieren der Datei my.cnf. In diesen Dateien sollte definiert werden, dass alle mit dem Server verbundenen Clients utf8 als Standardzeichensatz verwenden und dass der vom Server verwendete Standardzeichensatz auch utf8 ist.

   [client]
   port=3306
   default-character-set=utf8

   [mysql]
   default-character-set=utf8

MySQL-Prozeduren und -Funktionen

Für diese muss auch der Zeichensatz definiert sein. Zum Beispiel:

   DELIMITER $$

   DROP FUNCTION IF EXISTS `pathToNode` $$
   CREATE FUNCTION `pathToNode` (ryhma_id INT) RETURNS TEXT CHARACTER SET utf8
   READS SQL DATA
   BEGIN

    DECLARE path VARCHAR(255) CHARACTER SET utf8;

   SET path = NULL;

   ...

   RETURN path;

   END $$

   DELIMITER ;

GET-Anfragen: latin1 und UTF-8

Wenn in tomcats server.xml definiert ist, dass GET-Anforderungsparameter in UTF-8 codiert sind, werden die folgenden GET-Anforderungen ordnungsgemäß behandelt:

   https://localhost:8443/ID/Users?action=search&name=Petteri
   https://localhost:8443/ID/Users?action=search&name=ж

Da ASCII-Zeichen sowohl mit latin1 als auch mit UTF-8 auf die gleiche Weise codiert werden, wird die Zeichenfolge "Petteri" korrekt behandelt.

Das kyrillische Zeichen ж wird im Lateinischen1 überhaupt nicht verstanden. Da Tomcat angewiesen wird, Anforderungsparameter als UTF-8 zu behandeln, wird dieses Zeichen korrekt als % D0% B6 codiert .

Wenn Browser angewiesen werden, die Seiten in UTF-8-Codierung (mit Anforderungsheadern und HTML-Meta-Tag) zu lesen, codieren mindestens Firefox 2/3 und andere Browser aus dieser Zeit das Zeichen selbst als % D0% B6 .

Das Endergebnis ist, dass alle Benutzer mit dem Namen "Petteri" und auch alle Benutzer mit dem Namen "ж" gefunden werden.

Aber was ist mit äåö?

Die HTTP-Spezifikation definiert, dass URLs standardmäßig als latin1 codiert sind. Dies führt dazu, dass Firefox2, Firefox3 usw. Folgendes codiert

    https://localhost:8443/ID/Users?action=search&name=*Päivi*

in die verschlüsselte Version

    https://localhost:8443/ID/Users?action=search&name=*P%E4ivi*

In latin1 wird das Zeichen ä als % E4 codiert . Obwohl die Seite / Anfrage / alles für die Verwendung von UTF-8 definiert ist . Die UTF-8-codierte Version von ä ist % C3% A4

Dies hat zur Folge, dass die Webanwendung die Anforderungsparameter von GET-Anforderungen nicht richtig verarbeiten kann, da einige Zeichen in latin1 und andere in UTF-8 codiert sind. Hinweis: POST-Anforderungen funktionieren, wenn Browser alle Anforderungsparameter aus Formularen vollständig in UTF-8 codieren, wenn die Seite als UTF-8 definiert ist

Sachen zum Lesen

Ein großes Dankeschön an die folgenden Autoren für die Antworten auf mein Problem:

  • http://tagunov.tripod.com/i18n/i18n.html
  • http://wiki.apache.org/tomcat/Tomcat/UTF-8
  • http://java.sun.com/developer/technicalArticles/Intl/HTTPCharset/
  • http://dev.mysql.com/doc/refman/5.0/en/charset-syntax.html
  • http://cagan327.blogspot.com/2006/05/utf-8-encoding-fix-tomcat-jsp-etc.html
  • http://cagan327.blogspot.com/2006/05/utf-8-encoding-fix-for-mysql-tomcat.html
  • http://jeppesn.dk/utf-8.html
  • http://www.nabble.com/request-parameters-mishandle-utf-8-encoding-td18720039.html
  • http://www.utoronto.ca/webdocs/HTMLdocs/NewHTML/iso_table.html
  • http://www.utf8-chartable.de/

Wichtige Notiz

unterstützt die grundlegende mehrsprachige Ebene mit 3-Byte-UTF-8-Zeichen. Wenn Sie darüber hinausgehen müssen (bestimmte Alphabete erfordern mehr als 3 Byte UTF-8), müssen Sie entweder eine VARBINARYSpalte vom Spaltentyp verwenden oder den utf8mb4Zeichensatz verwenden (für den MySQL 5.5.3 oder höher erforderlich ist). Beachten Sie jedoch, dass die Verwendung des utf8Zeichensatzes in MySQL nicht 100% der Zeit funktioniert.

Kater mit Apache

Eine weitere Sache Wenn Sie den Apache + Tomcat + mod_JK-Connector verwenden, müssen Sie auch folgende Änderungen vornehmen:

  1. Fügen Sie URIEncoding = "UTF-8" in die Datei tomcat server.xml für den 8009-Connector ein. Dieser wird vom mod_JK-Connector verwendet. <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8"/>
  2. Goto Ihren Apache Ordner dh , /etc/httpd/confund fügen Sie AddDefaultCharset utf-8in httpd.conf file. Hinweis: Überprüfen Sie zunächst, ob es vorhanden ist oder nicht. Falls vorhanden, können Sie es mit dieser Zeile aktualisieren. Sie können diese Zeile auch unten hinzufügen.
kosoant
quelle
Diese Schritte funktionieren auch mit Struts / Kacheln und einer Postgres-Datenbank.
kosoant
17
Zwei Kommentare: 1) In HMTL-Meta-Tags haben Sie eine XML-Deklaration eingefügt . Entfernen Sie es, es würde nur Browser im Mackenmodus auslösen, das möchten Sie nicht haben. Außerdem werden die HTML-Meta-Tags tatsächlich bereits implizit von JSP erstellt pageEncoding, sodass Sie sie sogar weglassen können. 2) In der von Ihnen verwendeten MySQL-Datenbank und den von Ihnen verwendeten Tabellenutf8_swedish_si sollte dies der Fall sein utf8_unicode_ci. Sie könnten sogar die Zusammenstellung weglassen, ist einfach CHARACTER SET utf8genug.
BalusC
Keines der Dokumente, die ich zum HTML-Meta-Tag- und Mackenmodus konsultiert habe (z. B. ericmeyeroncss.com/bonus/render-mode.html , en.wikipedia.org/wiki/Quirks_mode ), weist auf das Vorhandensein von <meta http-equiv = 'Content hin -Type 'hat Auswirkungen auf den Rendermodus.
Marcel Stör
Als interessante Randnotiz möchten Sie möglicherweise auch wissen, dass Sie, wenn Sie einen Listener haben, der auf einen Anforderungsparameter zugreift, einen Listener hinzufügen müssen, der den Zeichensatz anstelle eines Filters festlegt, da die Listener vor den Filtern ausgeführt werden. Ich habe alle Schritte befolgt und es hat deshalb immer noch nicht funktioniert. Ich dachte nur, ich würde diese Informationen weitergeben, falls jemand anderes ein ähnliches Problem hat.
Testen123
3
## Tomcat mit Apache ## Noch etwas Wenn Sie den Apache + Tomcat + mod_JK-Connector verwenden, müssen Sie auch folgende Änderungen vornehmen: 1. Fügen Sie URIEncoding = "UTF-8" in die Datei tomcat server.xml für den 8009-Connector ein wird vom mod_JK-Connector verwendet. <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8"/> 2. Gehen Sie zu Ihrem Apache-Ordner, dh /etc/httpd/conffügen AddDefaultCharset utf-8Sie die Datei 'httpd.conf' hinzu. Hinweis: Überprüfen Sie zuerst, ob es vorhanden ist oder nicht. Falls vorhanden, können Sie es mit dieser Zeile aktualisieren. Sie können diese Zeile auch unten hinzufügen.
Vijay Shegokar
14

Ich denke, Sie haben es in Ihrer eigenen Antwort ganz gut zusammengefasst.

Während Sie UTF-8-ing (?) Von Ende zu Ende ausführen, möchten Sie möglicherweise auch sicherstellen, dass Java selbst UTF-8 verwendet. Verwenden Sie -Dfile.encoding = utf-8 als Parameter für die JVM (kann in Catalina.bat konfiguriert werden).

Stian
quelle
Dies hat mir geholfen, ich habe alles getan, aber die JVM-Codierung war Windows-1250, sobald ich auf UTF-8 umgestiegen bin, hat es einwandfrei funktioniert.
Coding_idiot
2
Wo fügen Sie das bitte in die Datei Catalina.bat ein?
Noah
11

Um die Antwort von kosoant zu ergänzen, können Sie , wenn Sie Spring verwenden, anstatt Ihren eigenen Servlet-Filter zu schreiben, die von ihnen bereitgestellte Klasse verwenden org.springframework.web.filter.CharacterEncodingFilterund sie wie folgt in Ihrer web.xml konfigurieren:

 <filter>
    <filter-name>encoding-filter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
       <param-name>encoding</param-name>
       <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
       <param-name>forceEncoding</param-name>
       <param-value>FALSE</param-value>
    </init-param>
 </filter>
 <filter-mapping>
    <filter-name>encoding-filter</filter-name>
    <url-pattern>/*</url-pattern>
 </filter-mapping>
Raedwald
quelle
1
Dieser Filter muss der erste Filter in web.xml sein
olyanren
2

Ich möchte auch von hier aus hinzufügen , dass dieser Teil mein utf-Problem gelöst hat:

runtime.encoding=<encoding>
John
quelle
1

Dies ist für die griechische Codierung in MySQL-Tabellen vorgesehen, wenn wir mit Java darauf zugreifen möchten:

Verwenden Sie den folgenden Verbindungsaufbau in Ihrem JBoss-Verbindungspool (mysql-ds.xml).

<connection-url>jdbc:mysql://192.168.10.123:3308/mydatabase</connection-url>
<driver-class>com.mysql.jdbc.Driver</driver-class>
<user-name>nts</user-name>
<password>xaxaxa!</password>
<connection-property name="useUnicode">true</connection-property>
<connection-property name="characterEncoding">greek</connection-property>

Wenn Sie dies nicht in einen JNDI-Verbindungspool einfügen möchten, können Sie es als JDBC-URL konfigurieren, wie in der nächsten Zeile dargestellt:

jdbc:mysql://192.168.10.123:3308/mydatabase?characterEncoding=greek

Für mich und Nick, also vergessen wir es nie mehr und verschwenden keine Zeit mehr .....

Mike Mountrakis
quelle
5
Ich würde immer noch UTF-8 gegenüber Griechisch bevorzugen (und Ihre aktuellen griechischen Daten in UTF-8 konvertieren), damit Ihre Anwendung für die Weltherrschaft bereit ist.
BalusC
1

Schöne ausführliche Antwort. Ich wollte nur noch eine Sache hinzufügen, die anderen definitiv helfen wird, die UTF-8-Codierung auf URLs in Aktion zu sehen.

Führen Sie die folgenden Schritte aus, um die UTF-8-Codierung für URLs in Firefox zu aktivieren.

  1. Geben Sie "about: config" in die Adressleiste ein.

  2. Verwenden Sie den Filtereingabetyp, um nach der Eigenschaft "network.standard-url.encode-query-utf8" zu suchen.

  3. Die obige Eigenschaft ist standardmäßig falsch. Setzen Sie diese auf TRUE.
  4. Starten Sie den Browser neu.

Die UTF-8-Codierung für URLs funktioniert standardmäßig in IE6 / 7/8 und Chrome.

Jay
quelle
1

Frühere Antworten haben mit meinem Problem nicht funktioniert. Es war nur in Produktion, mit Tomcat und Apache mod_proxy_ajp. Post Körper verloren nicht ASCII Zeichen von? Das Problem war schließlich mit JVM defaultCharset (US-ASCII in einer Standardinstallation: Charset dfset = Charset.defaultCharset ();). Daher wurde die Lösung Tomcat Server mit einem Modifikator ausgeführt, um die JVM mit UTF-8 als Standardzeichensatz auszuführen:

JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=UTF-8" 

(Fügen Sie diese Zeile zu Catalina.sh hinzu und starten Sie den Service Tomcat neu.)

Möglicherweise müssen Sie auch die Linux-Systemvariable ändern (bearbeiten Sie ~ / .bashrc und ~ / .profile für dauerhafte Änderungen, siehe https://perlgeek.de/en/article/set-up-a-clean-utf8-environment ).

export LC_ALL = en_US.UTF-8
export LANG = en_US.UTF-8

export LANGUAGE = en_US.UTF-8

Rogelio Triviño
quelle
0

Ich habe ein ähnliches Problem, aber in Dateinamen einer Datei komprimiere ich mit Apache Commons. Also habe ich es mit diesem Befehl gelöst:

convmv --notest -f cp1252 -t utf8 * -r

es funktioniert sehr gut für mich. Hoffe es hilft jemandem;)

caarlos0
quelle
0

Für den Fall, dass Unicode-Zeichen aus Nachrichtenpaketen angezeigt werden, muss der Abschnitt "JSP-Seitencodierung" nicht angewendet werden, um Unicode auf meiner JSP-Seite anzuzeigen. Ich brauche nur den Abschnitt "CharsetFilter".

bnguyen82
quelle
0

Ein weiterer Punkt, der nicht erwähnt wurde, betrifft Java-Servlets, die mit Ajax arbeiten. Ich habe Situationen, in denen eine Webseite utf-8-Text vom Benutzer aufnimmt, der diesen an eine JavaScript-Datei sendet, die ihn in einem an das Servlet gesendeten URI enthält. Das Servlet fragt eine Datenbank ab, erfasst das Ergebnis und gibt es als XML an die JavaScript-Datei zurück, die es formatiert und die formatierte Antwort in die ursprüngliche Webseite einfügt.

In einer Web-App folgte ich den Anweisungen eines frühen Ajax-Buches zum Einpacken des JavaScript beim Erstellen des URI. Das Beispiel in dem Buch verwendete die Escape () -Methode, die ich (auf die harte Tour) entdeckt habe, ist falsch. Für utf-8 müssen Sie encodeURIComponent () verwenden.

Heutzutage scheinen nur wenige Leute ihren eigenen Ajax zu rollen, aber ich dachte, ich könnte das genauso gut hinzufügen.

David
quelle
0

Über CharsetFilterin @kosoant Antwort erwähnt ....

Es gibt einen Filtereingebauten Kater web.xml(befindet sich in conf/web.xml). Der Filter wird benannt setCharacterEncodingFilterund standardmäßig kommentiert. Sie können dies auskommentieren (Bitte denken Sie daran, es auch zu kommentieren filter-mapping)

Es ist auch nicht erforderlich, jsp-configin Ihrem web.xml(ich habe es für Tomcat 7+ getestet)

Alireza Fattahi
quelle
0

Einige Zeit können Sie das Problem mit dem MySQL Administrator-Assistenten lösen. Im

Startvariablen> Erweitert>

und setze Def. char Set: utf8

Möglicherweise muss diese Konfiguration MySQL neu starten.

user3600935
quelle
0

Das gleiche Problem trat bei Spring MVC 5 + Tomcat 9 + JSP auf.
Nach der langen Forschung kam zu einer eleganten Lösung ( keine Notwendigkeit , Filter und keine Notwendigkeit , Änderungen in der Tomcat server.xml (ab 8.0.0-RC3 Version))

  1. Legen Sie in der WebMvcConfigurer-Implementierung die Standardcodierung für messageSource fest (zum Lesen von Daten aus Nachrichtenquelldateien in der UTF-8-Codierung.

    @Configuration
    @EnableWebMvc
    @ComponentScan("{package.with.components}")
    public class WebApplicationContextConfig implements WebMvcConfigurer {
    
        @Bean
        public MessageSource messageSource() {
            final ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
    
            messageSource.setBasenames("messages");
            messageSource.setDefaultEncoding("UTF-8");
    
            return messageSource;
        }
    
        /* other beans and methods */
    
    }
  2. In der DispatcherServletInitializer-Implementierung @Override die onStartup-Methode und legen Sie die Anforderungs- und Ressourcenzeichencodierung fest.

    public class DispatcherServletInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
    
        @Override
        public void onStartup(final ServletContext servletContext) throws ServletException {
    
            // https://wiki.apache.org/tomcat/FAQ/CharacterEncoding
            servletContext.setRequestCharacterEncoding("UTF-8");
            servletContext.setResponseCharacterEncoding("UTF-8");
    
            super.onStartup(servletContext);
        }
    
        /* servlet mappings, root and web application configs, other methods */
    
    }
  3. Speichern Sie alle Nachrichtenquellen und zeigen Sie Dateien in UTF-8-Codierung an.

  4. Fügen Sie <% @ page contentType = "text / html; charset = UTF-8"%> oder <% @ page pageEncoding = "UTF-8"%> in jede * .jsp-Datei ein oder fügen Sie jsp-config deskriptors zu web.xml hinzu

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee"
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
     id="WebApp_ID" version="3.0">
        <display-name>AppName</display-name>
    
        <jsp-config>
            <jsp-property-group>
                <url-pattern>*.jsp</url-pattern>
                <page-encoding>UTF-8</page-encoding>
            </jsp-property-group>
        </jsp-config>
    </web-app>
Andrei Veshtard
quelle
-1

Falls Sie im Verbindungspool (mysql-ds.xml) angegeben haben, können Sie die Verbindung in Ihrem Java-Code wie folgt öffnen:

DriverManager.registerDriver(new com.mysql.jdbc.Driver());
Connection conn = DriverManager.getConnection(
    "jdbc:mysql://192.168.1.12:3308/mydb?characterEncoding=greek",
    "Myuser", "mypass");
Mike Mountrakis
quelle