Domanda

Ho un html-form con diversi campi di testo.

Quando provo a inviare dall'inglese di caratteri (russo nel mio caso) server "illeggibile" stringa (non domande "???" ma alcuni caratteri strani).

Ho semplificato il mio codice per visualizzare qui:

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

Come posso risolvere il problema?

È stato utile?

Soluzione

Tomcat ISO-8859-1 come la codifica carattere di default per i parametri dell'URL, indipendentemente dalla codifica della pagina che contiene l'URL.Questo può essere cambiato con il "URIEncoding" attributo nel relativo Connettore di configurazione.Altri application server possono avere impostazioni simili.

Questo articolo copre molti problemi comuni quando si lavora con JSP.

Altri suggerimenti

Erickson ha spiegato molto bene su questa pagina. Una soluzione server-indipendente è di usare un filtro codifica caratteri, à l'org.springframework.web.filter.CharacterEncodingFilter. Vedere il seguente esempio:

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 aggiungere la dichiarazione di filtro e la mappatura del filtro URL in sezioni appropriate:

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

Quando si utilizza POST - che è d'obbligo tu utilizza la codifica - la forma è inviare come contenuto-type "application / x-www-form-urlencoded". È possibile specificare la forma-attributo accept-charset = "UTF-8" per specificare la codifica.

Questa è la stessa di Victor Ionescu proposto, ma non è necessario scrivere il proprio filtro di codifica.

Aggiungere il seguente filtro per 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>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top