Подтвердить что ты не робот

Обработка кодировки символов в URI на Tomcat

На веб-сайте, с которым я пытаюсь помочь, пользователь может ввести URL-адрес в браузере, например, следующие китайские символы,

  http://localhost:8080?a=测试

На сервере мы получаем

  GET /a=%E6%B5%8B%E8%AF%95 HTTP/1.1

Как вы можете видеть, он кодируется UTF-8, затем кодируется URL. Мы можем справиться с этим правильно, установив кодировку в UTF-8 в Tomcat.

Однако иногда мы получаем кодировку Latin1 в некоторых браузерах,

  http://localhost:8080?a=ß

превращается в

  GET /a=%DF HTTP/1.1

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

Сервер Tomcat 5.5. Поддерживаемые браузеры - IE 6+, Firefox 2+ и Safari на iPhone.

4b9b3361

Ответ 1

К сожалению, кодировка UTF-8 является "обязательной" в спецификации запись в Википедии имеет хорошую таблицу допустимых и недопустимых байтов).

Менее надежным будет просмотр заголовка "Accept-Charset" в запросе. Я не думаю, что этот заголовок необходим (не проверял спецификацию HTTP для проверки), и я знаю, что Firefox, по крайней мере, отправит целый список допустимых значений. Выбор первого значения в списке может работать, или это может быть не так.

Наконец, проделали ли вы какой-либо анализ журналов, чтобы убедиться, что конкретный пользовательский агент будет последовательно использовать эту кодировку?