Сервлет Java: как обрабатывать неизвестные кодировки? - PullRequest
1 голос
/ 05 июня 2009

Когда определенный пользователь пытается просмотреть нашу веб-страницу, при вызове response.getWriter () выдается исключение NullPointerException с сообщением «charsetName». Я декомпилировал класс ответа нашего веб-сервера (JRun 3.1) и обнаружил, что эта ошибка выдается, когда он делает это:

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', что, похоже, и делает браузер пользователя.

Это код веб-сервера, поэтому я не могу вносить здесь никаких изменений, но это то, что мы можем сделать с нашей стороны, чтобы этого никогда не произошло. Можем ли мы явно заставить веб-сервер использовать определенную кодировку и не оставлять его на усмотрение запросов?

Ответы [ 2 ]

1 голос
/ 05 июня 2009

MacRoman - это «международный набор символов», который не всегда устанавливается установщиком Sun Java и, следовательно, недоступен для программ.

Согласно http://java.sun.com/javase/6/docs/technotes/guides/intl/encoding.doc.html это не будет сделано, если установщик определит, что это «европейская» операционная система.

Если вы переустанавливаете Sun Java и запрашиваете поддержку неевропейских языков в индивидуальной установке, это следует исправить.

0 голосов
/ 05 июня 2009

Вы можете создать фильтр и новый Запрос (используя оболочку запроса), который всегда отвечает «действительной» кодировке символов, для различных значений «действительных». По сути, это то, что они пытаются сделать с помощью вызова MIME2Java.convert (), но вам придется сделать это «рано» и перехватить это, чтобы обеспечить лучший контроль над кодировкой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...