2009-06-05 16 views
1

特定のユーザーがWebページを表示しようとすると、response.getWriter()を呼び出すと、メッセージ 'charsetName'を含むNullPointerExceptionがスローされます。私は、当社のウェブサーバのレスポンスクラス(JRunの3.1)を逆コンパイルし、それがこれを行うときに、このエラーがスローされていることがわかった:Javaサーブレット:未知のエンコーディングを処理するには?

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

私はのリクエストヘッダを送信するために私のブラウザを強制するとき、私は最終的にこのバグを再現することができました'Accept-Charset = x-mac-roman、utf-8'。これはユーザのブラウザのようです。

これはウェブサーバーコードなので、私はここで変更することはできませんが、これでは決してこれが起こらないことを保証するために何かをすることができます。明示的にウェブサーバーに特定のエンコーディングを使用させ、要求にそれを委ねないようにすることはできますか?

答えて

0

「有効」文字のエンコードに常に応答するフィルタと新しいリクエスト(リクエストラッパーを使用)を作成することができます。効果的には、MIME2Java.convert()呼び出しでこれをしようとしていますが、エンコーディングをよりよく制御できるようにするためには、「早期に」行う必要があります。

1

MacRomanは、Sun Javaインストーラによって常にインストールされるわけではないため、プログラムで使用できない「国際文字セット」です。

http://java.sun.com/javase/6/docs/technotes/guides/intl/encoding.doc.htmlによると、インストーラが「ヨーロッパ」オペレーティングシステムであると判断した場合は実行されません。

Sun Javaを再インストールし、カスタマイズされたインストールで非ヨーロッパ言語のサポートをリクエストした場合は、これを修正する必要があります。

関連する問題