Пользовательский заголовок HTTP передается в приложение сервлета для аутентификации. Значение заголовка должно содержать акценты и другие символы, не входящие в 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");