Вопрос по servlets, utf-8, http, header, java – Отправка значений UTF-8 в заголовках HTTP приводит к Mojibake

10

я хочу отправить арабские данные из сервлета, используя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   ответа
2

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

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

ОБНОВЛЕНИЕ: Похоже, проблема в данных в кодировке UTF-8 в HTTPheaders, увидеть:HTTP кодирование / декодирование заголовков в Java для подробного обсуждения.

@Totti: посмотрите мое обновление и прочитайтеstackoverflow.com/questions/324470
я проверю, спасибо Totti
я уже пробовал и не работает, см. редактирование, пожалуйста Totti
29

ко ISO-8859-1. Смотрите такжеRFC 2616 раздел 2:

Words of *TEXT MAY contain characters from character sets other than ISO- 8859-1 [22] only when encoded according to the rules of RFC 2047 [14].

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

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

а также

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

URL-кодировка превратит их в%nn format который является совершенно действительным ISO-8859-1. Обратите внимание, что данные, отправляемые в заголовках, могут иметь ограничения по размеру. Вместо этого отправьте его в теле ответа, в текстовом формате, JSON, CSV или XML. Таким образом, использование пользовательских заголовков HTTP - это запах дизайна.

Мне нужно было передать строку UTF-8 из PHP в Javascript через обычные заголовки HTTP, и кодировка URL помогла, спасибо!
Я попробую , Totti
снова thaaaaaaaank you, действительно спасибо Totti

Похожие вопросы