request.getCharacterEncoding () gibt NULL zurück ... warum?

8

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:

  • Beide HTML-Seiten haben das Tag: <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  • Beide Form-Tags im HTML verwenden POST und legen keine Kodierungen
  • fest
  • Beim Überprüfen von Firebug haben sowohl die Request- als auch die Response-Header die gleichen Eigenschaften
  • Beide JSP-Seiten verwenden die gleichen Attribute im <%@page contentType="text/html;charset=UTF-8" language="java" %> -Tag
  • In den * Form.java-Dateien, die beide von BaseValidatorForm
  • stammen, ist nichts Interessantes zu sehen
  • Ich habe die Codierungen der Quelldatei überprüft, sie sind alle auf Standard gesetzt - geerbt von Container: UTF-8

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.

    
Jay 10.09.2012, 19:20
quelle

2 Antworten

15

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.

%Vor%

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.

Siehe auch:

BalusC 10.09.2012, 19:25
quelle
0

Das request.getCharacterEncoding() basiert auf dem Attribut Content-Type request, nicht auf Accept-Charset

So application/x-www-form-urlencoded;charset=IS08859_1 sollte für die POST-Aktion funktionieren. Das <%@page -Tag beeinflusst die POST-Daten nicht.

    
mprivat 10.09.2012 19:26
quelle