Пользовательский HTTP-заголовок передается в приложение Servlet для целей аутентификации. Значение заголовка должно содержать акценты и другие символы, отличные от ASCII, поэтому они должны быть в определенной кодировке (в идеале UTF-8).
Мне предоставлен этот кусок кода Java разработчиками, которые контролируют среду проверки подлинности:
String firstName = request.getHeader("my-custom-header");
String decodedFirstName = new String(firstName.getBytes(),"UTF-8");
Но этот код мне не подходит: он предполагает кодировку значения заголовка, когда мне казалось, что существует правильный способ указать кодировку для значений заголовка (из MIME, я считаю).
Вот мой вопрос: какой правильный способ (tm) иметь дело с пользовательскими значениями заголовков, которые должны поддерживать кодировку UTF-8:
- на проводе (как выглядит заголовок по кабелю)
- с точки зрения декодирования (как его декодировать с использованием Java Servlet API, и можем ли мы предположить, что request.getHeader() уже правильно декодирует)
Вот пример кода, независимого от среды, для обработки заголовков как UTF-8, если вы не можете изменить свою службу:
String valueAsISO = request.getHeader("my-custom-header");
String valueAsUTF8 = new String(firstName.getBytes("ISO8859-1"),"UTF-8");