ResourceResponse.setCharacterEncoding () не работает - PullRequest
1 голос
/ 20 августа 2009

Мне нужно вернуть некоторую специальную латинскую букву (например, á) в ответе метода портлета serveResource(). Я пробовал следующие способы:

response.setCharacterEncoding("ISO-8859-1") ;
PrintWriter out = resWrapper.getWriter();
out.println("á");
out.close();

ИЛИ

response.setContentType("text/plain; charset=ISO-8859-1");
PrintWriter out = resWrapper.getWriter();
out.println("á");
out.close();

Вызов XHR внешнего интерфейса (к URL-адресу serveResource) не возвращает правильный символ обратно ни одним из указанных выше подходов. Однако, если XHR отправляет запрос в HttpServlet (с точно такими же кодами ответа, что и выше), он работает нормально.

Может кто-нибудь, пожалуйста, пролить свет на проблему здесь?

Ответы [ 2 ]

1 голос
/ 09 ноября 2009

Возможно ли, что браузер интерпретирует ответ от вызова serveResource () в соответствии с набором символов, указанным на странице, содержащей портлет, вместо того, что вы намереваетесь? Возможно, вы получаете правильный символ обратно, но когда браузер отображает его, он игнорирует то, что вы установили в методе serveResource (), и отображает его с тем же набором символов, что и остальная часть страницы.

Это может объяснить, почему он работает нормально с HttpServlet, который отвечает за отображение всей страницы, а не только ее части. И так, установка кодировки символов в ответе закрывает дело в этом случае.

0 голосов
/ 09 ноября 2009

Я бы:

  • Сохранить полученный результат на диск и выполнить шестнадцатеричный дамп; значение U + 00e1 (& # x00e1;), закодированное как ISO-8859-1, должно быть E1. Если это так, значит что-то не так с интерпретацией данных на клиенте (проверьте HTTP заголовки ). Если это не так, существует проблема с тем, как данные кодируются (кодируются как UTF-8, символ становится байтами C3 A1).
  • Попробуйте изменить вывод на out.println(\u00E1");. Если это работает, то проблема в том, как компилятор загружает и интерпретирует исходный код Java. Это маловероятно, учитывая, что сервлет работает.
...