Ein Kollege von mir hat ein grundlegendes contact-us type-Formular erstellt, in dem akzentuierte Zeichen (è, é, à, etc) fehlen. Wir verwenden KonaKart eine Java-E-Commerce-Plattform auf Struts 1.
Ich habe das Problem auf die Daten beschränkt, die über das HttpServletRequest-Objekt eingehen. Beim Vergleich einer ähnlichen (richtig funktionierenden) Form habe ich festgestellt, dass auf der alten Form die Zeichenkodierung des Anfrageobjekts ( request.getCharacterEncoding()
) als "UTF-8" zurückgegeben wird, aber auf der neuen Form als NULL und der Text zurückkommt Coming Out von request.getParameter()
ist bereits entstellt.
Abgesehen davon habe ich keine signifikanten Unterschiede zwischen der bekannten guten Form und der neuen und gebrochenen Form gefunden.
Dinge, die ich ausgeschlossen habe:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<%@page contentType="text/html;charset=UTF-8" language="java" %>
-Tag Wenn ich sie von ISO-8859-1 nach UTF-8 umwandele, funktioniert das großartig, aber ich würde viel lieber das Kernproblem herausfinden.
zB: new String(request.getParameter("firstName").getBytes("ISO-8859-1"),"UTF8")
Irgendwelche Vorschläge sind willkommen, ich habe keine Ideen mehr.
Moderne Browser liefern normalerweise die Zeichencodierung nicht in der HTTP-Anfrage Content-Type
header. Es ist im Fall von HTML-Formular-basierten Anwendungen jedoch die gleiche Zeichencodierung, wie sie in dem Content-Type
-Header der anfänglichen HTTP-Antwort angegeben ist, die die Seite mit dem Formular bedient. Sie müssen die Anfragezeichencodierung explizit auf die selbe Codierung setzen, was in Ihrem Fall also UTF-8 ist.
Mache dies , bevor ein Anfrageparameter aus der Anfrage abgerufen wurde (andernfalls ist es zu spät; die Standardcodierung der Serverplattform würde dann zum Parsen der Parameter verwendet werden, was in der Tat oft ISO-8859- ist). 1). Ein Servlet-Filter , der auf /*
abgebildet ist, ist ein perfekter Ort dafür.
Tags und Links java character-encoding servlets struts-1 konakart