Formulare und Umlaute

Status
Nicht offen für weitere Antworten.

Rumborak

Aktives Mitglied
Hallo zusammen!

Wie kann ich dafür sorgen, daß Umlaute in Formularfeldern richtig übertragen werden?

Der Aufbau der JSP sieht wie folgt aus:
Code:
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic"%>
<%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles"%>
<%@ taglib uri="/tags-page" prefix="page"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html:html xhtml="true">
...

über Tiles wird dann irgendwo ein Formular eingebunden - Textfelder sind so definiert:

Code:
<html:text name="Bla" property="blub" styleClass="text" />

HTML-Sonderzeichen werden wohl automatisch korrekt encodiert, nur mit den Umlauten klappt das nicht - wieso eigentlich? der Quellcode der HTML-Seite sieht im Browser so aus:
<!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" lang="de-DE" xml:lang="de-DE">
<head>
...
Hat da jemand eine Idee?

Wäre super :D !
 

mlange8801

Aktives Mitglied
Das Problem bei UTF-8 ist wohl, dass Tomcat (falls Du Tomcat verwendest) davon ausgeht, dass der Browser das encoding mitsendet (Was wohl nach der Spezifikation auch der Browser machen sollte - die meisten Browser halten sich nur nicht daran).
Wenn dies nicht der Fall ist, nimmt Tomcat wohl iso als encoding an.
Eine Möglichkeit ist es, einfach das encoding in einem Filter zu setzen:

Code:
package filter;
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 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
 {

  request.setCharacterEncoding(encoding);
  next.doFilter(request, response);
 }

 public void destroy(){}
}
Code:
   <filter>
    <filter-name>Charset Filter</filter-name>
    <filter-class>filter.CharsetFilter</filter-class>
      <init-param>
        <param-name>requestEncoding</param-name>
        <param-value>UTF-8</param-value>
      </init-param>
  </filter>


   <filter-mapping>
    <filter-name>Charset Filter</filter-name>
    <url-pattern>*.do</url-pattern>
  </filter-mapping>

oder halt so:
Code:
   <filter>
    <filter-name>Charset Filter</filter-name>
    <filter-class>filter.CharsetFilter</filter-class>
      <init-param>
        <param-name>requestEncoding</param-name>
        <param-value>UTF-8</param-value>
      </init-param>
  </filter>


   <filter-mapping>
    <filter-name>Charset Filter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
 

Rumborak

Aktives Mitglied
Super, danke!

Hat wunderbar gekappt. Wo kann man denn sowas eigentlich nachlesen - bzw. woher weißt Du das?
 

Rumborak

Aktives Mitglied
Ja, nochmals danke - auch für den Link!

Du hast mir durch deine Antwort sehr geholfen - oft macht man an so "Kleinigkeiten" ewig rum und kommt nicht weiter...
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen


Oben