ответы кодировки символов с помощью RESTEasy / jax-rs - PullRequest
4 голосов
/ 23 ноября 2011

Я настроен с помощью RESTeasy для jax-rs на моем сервере. Мой клиент отправляет строку, содержащую символ «✓», и сервер может сохранить этот символ (я могу подтвердить, что он правильно хранится на сервере). Однако сервер не может вернуть «✓» в ответе, вместо этого «?» получает.

Я предполагаю, что мне нужно указать кодировку возврата или что-то в этом роде, но я не знаю, где это сделать или как проверить, какая текущая кодировка есть!

Как мне указать кодировку на моем сервере, чтобы я мог вернуть '✓' в ответе?

изменить, чтобы добавить код

Код моего сервера:

@Path("compiled/{rootReportGroupId}")
@GET
@Produces("text/html; charset=UTF-8")
@NoCache
public String getCompiledReports(@PathParam("rootReportGroupId") Long rootReportGroupId){
    return "✓";
}

Пример запроса:

GET http://192.168.0.12:8888/rest/reports/compiled/190
Host    192.168.0.12:8888
User-Agent  Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:7.0.1) Gecko/20100101 Firefox/7.0.1
Accept  text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language en-us,en;q=0.5
Accept-Encoding gzip, deflate
Accept-Charset  ISO-8859-1,utf-8;q=0.7,*;q=0.7
Connection  keep-alive
Content-Type    application/json

Заголовки ответа:

Cache-Control   public, no-transform, no-cache
Content-Type    text/html;charset="UTF-8"
Content-Length  1
Server  Jetty(6.1.x)

Тело ответа:

?

Ответы [ 3 ]

3 голосов
/ 24 ноября 2011

Немного бессвязно и долго, поэтому я вставил это в ответ, но в основном это комментарий.

Из любопытства, какие версии Java, Rest Easy, настройки компилятора вы используете?

Я использовал ваш код, который вы разместили здесь на MacOS 10.6, RestEasy 2.2.3.GA, Java 1.6.0_29, Tomcat 7.0.22, и он работал правильно (я удалил часть параметров, но она не актуальна) .

Какой код используется для чтения и записи на стороне сервера? Есть ли проблемы с кодированием при чтении?

Я также с подозрением отношусь к вашим заголовкам ответов, в частности:

Content-Type    text/html;charset="UTF-8"

Я думаю, должно быть:

Content-Type    text/html;charset=UTF-8
2 голосов
/ 16 января 2015

Как указать кодировку на моем сервере, чтобы я мог вернуть '✓' в ответе?

Существует три уровня для настройки:

  1. Отображение в браузере и отправка формы

JSP

<%@page pageEncoding="UTF-8" contentType="text/html; charset=UTF-8"%>

HTML

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
Обработка веб-сервера

JSP

<%
  request.setCharacterEncoding("UTF-8");
  String name = request.getParameter("NAME");
%>

То же, что и в сервлете.См. Конкретное решение JBoss, а также полное решение, не зависящее от сервера, в этом ответе .

Настройки базы данных

Возможно, вы теряете информацию о символах на уровне базы данных.Убедитесь, что кодировка вашей базы данных также соответствует UTF-8, а не ASCII.

Для полного обсуждения этой темы см. Статью Java Преобразование символов из браузера в базу данных .

0 голосов
/ 25 июня 2013

Я думаю, что проблема в том, что ваш IDE / текстовый редактор сохраняет файл в другой кодировке, поэтому вы заставляете контейнер возвращать кодировку UTF-8, но текст не является таковым, что создает проблему.

С уважением Луан

...