2009-06-05 10 views
1

Wenn ein bestimmter Benutzer versucht, unsere Webseite anzuzeigen, wird eine NullPointerException mit der Nachricht 'charsetName' ausgelöst, wenn wir response.getWriter() aufrufen. Ich dekompilierten unsere Antwort-Klasse Web-Server (JRun 3.1) und festgestellt, dass dieser Fehler ausgelöst wird, wenn es tut dies:Java Servlet: Wie mit unbekannten Codierungen umgehen?

s = getCharacterEncoding(); // returns 'x-mac-roman' I believe 
try 
{ 
    outWriter.exchangeWriter(new OutputStreamWriter(bufStream, s)); 
} 
catch(UnsupportedEncodingException unsupportedencodingexception) 
{ 
    s = MIME2Java.convert(s); // looks like this returns null 
    outWriter.exchangeWriter(new OutputStreamWriter(bufStream, s)); // NPE!!! 
} 

war ich endlich in der Lage, diesen Fehler zu reproduzieren, wenn ich meinen Browser eine Anfrage-Header zu senden gezwungen 'Accept-Charset = x-mac-roman, utf-8', was der Browser des Benutzers zu tun scheint.

Dies ist Webserver-Code, so kann ich hier keine Änderungen vornehmen, aber das es etwas, das wir auf unserer Seite tun können, um sicherzustellen, dass dies nie passiert. Können wir den Webserver explizit zwingen, eine bestimmte Kodierung zu verwenden und diese nicht den Anfragen zu überlassen?

Antwort

0

Sie können einen Filter erstellen und eine neue Anforderung (eine Anforderung Wrapper), die immer eine „gültige“ Zeichencodierung reagiert, für verschiedene Werte von „gültig“. Genau das versuchen sie mit dem MIME2Java.convert() - Aufruf, aber Sie müssten das "früh" machen und abfangen, um sicherzustellen, dass Sie die Kodierung besser kontrollieren können.

1

MacRoman ist ein „internationaler Zeichensatz“, die nicht immer von den Sun Java-Installer installiert ist, und daher nicht zur Verfügung zu den Programmen.

Nach http://java.sun.com/javase/6/docs/technotes/guides/intl/encoding.doc.html ist es nicht getan, wenn das Installationsprogramm bestimmt es ein „europäisches“ Betriebssystem ist.

Wenn Sie Ihre Sun Java und fordert Unterstützung für nicht-europäische Sprachen in einer angepassten Installation neu installieren, sollten diese korrigiert werden.

Verwandte Themen