Отправка значений UTF-8 в заголовках HTTP приводит к Mojibake

Я хочу отправить арабские данные с сервлета, используя HTTPServletResponse для клиентов

Я пытаюсь этот

response.setCharacterEncoding("UTF-8");
response.setHeader("Info", arabicWord);

и я получаю такое слово

String arabicWord = response.getHeader("Info");

в клиенте (получение) также попробовал это

byte[]d = response.getHeader("Info").getBytes("UTF-8");
arabicWord = new String(d);

но, похоже, нет unicode, потому что я получаю странные английские слова,поэтому, пожалуйста, как я могу отправлять и получать арабские utf8 слова?

2 ответов


заголовки HTTP не поддерживают UTF-8. Они официально поддерживают только ISO-8859-1. См. также RFC 2616 2:

слова * TEXT могут содержать символы из наборов символов, отличных от ISO-8859-1 [22], только если они закодированы в соответствии с правилами RFC 2047 [14].

ваш лучший выбор, чтобы URL-кодировать и декодировать их.

response.setHeader("Info", URLEncoder.encode(arabicWord, "UTF-8"));

и

String arabicWord = URLDecoder.decode(response.getHeader("Info"), "UTF-8");

URL-кодирование преобразует их в


Я не знаю, где word переменная исходит, но попробуйте следующее:

arabicWord = new String(d, "UTF-8");

UPDATE: похоже, проблема связана с кодированными данными UTF-8 в HTTP заголовки см.: HTTP заголовки кодирования/декодирования в Java для детального обсуждения.