Frage

Ich habe ein HTML-Formular mit mehreren Textfeldern.

Wenn ich versuche, nicht englische Zeichen (Russisch in meinem Fall) einreichen Server empfangen „unleserlich“ string (nicht Fragen - „???“ aber einige seltsamen Zeichen).

Ich vereinfachte meinen Code, es zu zeigen hier:

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head><title>Simple jsp page</title></head>
  <body>
    <c:out value="${param.rustext}"/>
    <form action="/test" method="post">
        <input type="text" name="rustext" width="30">
        <input type="submit" value="Submit">
    </form>
  </body>
</html>

Wie soll ich das beheben, dass?

War es hilfreich?

Lösung

Tomcat verwendet ISO-8859-1 als Standard-Zeichencodierung für URL-Parameter, unabhängig von der Codierung der Seite, die die URL enthält. Dies kann mit dem „URIEncoding“ -Attribut in seinem Stecker geändert werden Konfiguration. Andere Anwendungsserver können ähnliche Einstellungen.

Dieser Artikel viele oft auftretenden Probleme abdeckt, wenn mit JSP arbeiten.

Andere Tipps

Erickson erklärt dies sehr gut auf dieser Seite. Eine serverunabhängige Lösung ist es, eine Zeichenkodierung Filter, a la org.springframework.web.filter.CharacterEncodingFilter zu verwenden. Siehe Beispiel unten:

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class EncodingFilter implements Filter {
    private String encoding = "utf-8";
    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain filterChain) throws IOException, ServletException {
        request.setCharacterEncoding(encoding);
        filterChain.doFilter(request, response);
    }
    public void init(FilterConfig filterConfig) throws ServletException {
        String encodingParam = filterConfig.getInitParameter("encoding");
        if (encodingParam != null) {
            encoding = encodingParam;
        }
    }
    public void destroy() {
        // nothing todo
    }
}

In web.xml fügen Sie die Filter-Deklaration und die Filter URL-Zuordnung in den entsprechenden Abschnitten:

  <filter>
  <filter-name>EncodingFilter</filter-name>
  <description>
    <![CDATA[Changes the encoding of the request, in order to help the appserver to correctly interpret request params]]>
  </description>
  <filter-class>com.mypackage.EncodingFilter</filter-class>  
 <init-param>
    <param-name>encoding</param-name>
    <param-value>ISO-8859-15</param-value>
  </init-param>   
</filter>


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

Wenn POST - das ist ein Muss, tu Codierung verwenden - die Form ist senden als Content-Typ "application / x-www-form-urlencoded". Sie können angeben, die Form-Attribut accept-charset = "UTF-8" Ihre Codierung angeben.

Dies ist das gleiche wie Victor Ionescu vorgeschlagen, aber Sie müssen keine eigenen Codierfilter schreiben zu können.

Fügen Sie die folgenden Filter zu web.xml

<filter>
    <filter-name>charsetFilter</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>
</filter>

<filter-mapping>
    <filter-name>charsetFilter</filter-name>
    <url-pattern>*.admin</url-pattern>
</filter-mapping>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top