Отправка значений 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");
Я не знаю, где word
переменная исходит, но попробуйте следующее:
arabicWord = new String(d, "UTF-8");
UPDATE: похоже, проблема связана с кодированными данными UTF-8 в HTTP заголовки см.: HTTP заголовки кодирования/декодирования в Java для детального обсуждения.