Question

J'ai une forme html avec plusieurs champs de texte.

Lorsque je tente de présenter pas les caractères anglais (russe dans mon cas) serveur est reçu chaîne « illisible » (pas des questions - « ??? », mais certains personnages étranges).

J'ai simplifié mon code pour le montrer ici:

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

Comment dois-je résoudre ce problème?

Était-ce utile?

La solution

Tomcat utilise ISO-8859-1 comme le caractère par défaut pour le codage des paramètres d'URL, quel que soit le codage de la page qui contient l'URL. Ceci peut être changé avec l'attribut « URIEncoding » dans son connecteur . D'autres serveurs d'applications peuvent avoir les mêmes paramètres.

cet article couvre de nombreux problèmes couramment rencontrés lorsque vous travaillez avec JSP.

Autres conseils

Erickson explique très bien sur cette page. Une solution de serveur indépendante est d'utiliser un filtre de codage de caractères, à la org.springframework.web.filter.CharacterEncodingFilter. Voir exemple ci-dessous:

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

Dans web.xml ajouter la déclaration de filtre et le mappage d'URL de filtre dans les sections appropriées:

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

Lors de l'utilisation POST - qui est un must tu utiliser le codage - la forme est envoyé comme type de contenu "application / x-www-form-urlencoded". Vous pouvez spécifier la forme attribut accept-charset = "UTF-8" pour spécifier l'encodage.

est le même que Victor Ionescu proposé, mais vous n'avez pas besoin d'écrire votre propre filtre de codage.

Ajoutez le filtre suivant à 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>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top