375 Stimmen

Wie kann man UTF-8 in Java-Webanwendungen zum Laufen bringen?

Ich muss UTF-8 in meiner Java-Webapp (Servlets + JSP, kein Framework verwendet) arbeiten, um zu unterstützen äöå usw. für normalen finnischen Text und kyrillische Alphabete wie für besondere Fälle.

Ich habe die folgende Konfiguration:

  • Entwicklungsumgebung: Windows XP
  • Produktionsumgebung: Debian

Verwendete Datenbank: MySQL 5.x

Die Nutzer verwenden hauptsächlich Firefox2, aber auch Opera 9.x, FF3, IE7 und Google Chrome werden für den Zugriff auf die Website verwendet.

Wie kann dies erreicht werden?

0voto

Alireza Fattahi Punkte 37703

Über CharsetFilter erwähnt in der Antwort von @kosoant ....

Es gibt eine eingebaute Filter im Kater web.xml (zu finden unter conf/web.xml ). Der Filter hat den Namen setCharacterEncodingFilter und wird standardmäßig kommentiert. Sie können die Kommentierung aufheben ( Bitte denken Sie daran, die Kommentierung der filter-mapping zu )

Es ist auch nicht nötig, die jsp-config in Ihrem web.xml (Ich habe es für Tomcat 7+ getestet)

0voto

MrSalesi Punkte 310

In manchen Fällen können Sie das Problem mit dem MySQL-Administrator-Assistenten lösen. Unter

Startvariablen > Erweitert >

und setzen Sie Def. char Set:utf8

Vielleicht muss diese Konfiguration MySQL neu starten.

0voto

Andrei Veshtard Punkte 489

Konfrontiert das gleiche Problem auf Spring MVC 5 + Tomcat 9 + JSP.
Nach langer Recherche kam ich zu einer eleganten Lösung ( keine brauchen filtert y keine brauchen Änderungen im Tomcat server.xml (ab Version 8.0.0-RC3))

  1. In der WebMvcConfigurer-Implementierung setzen Sie die Standardkodierung für messageSource (zum Lesen von Daten aus Nachrichten-Quelldateien in der UTF-8-Kodierung.

    @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 @Überschreiben Sie die onStartup-Methode und legen Sie darin die Zeichenkodierung für Anfragen und Ressourcen 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 Quell- und Anzeigedateien für Nachrichten in UTF-8-Kodierung.

  4. Hinzufügen von <%@ page contentType="text/html;charset=UTF-8" %> o <%@ page pageEncoding="UTF-8" %> in jeder *.jsp-Datei o jsp-Konfigurationsdeskriptor zu web.xml hinzufügen

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

-1voto

Mike Mountrakis Punkte 21

Wenn Sie im Verbindungspool (mysql-ds.xml) angegeben haben, können Sie in Ihrem Java-Code die Verbindung 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");

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X