AngularJS + Java Rest API + MySQL. Диакритические знаки не будут правильно кодироваться

0

У меня есть проблема, которую я не могу решить, и речь идет о кодировании диакритики (например: ă Ă â Â î Î ş Ş ţ Ţ). Проблема, кажется, где-то между клиентом и сервером, но я не понимаю, как, потому что я правильно настроил кодировку.

Это код:

Угловая сторона

$http({
        method: 'POST',
        url: serverUrl + 'wr/users/update',
        data: JSON.stringify(content),
            headers: { 'Content-Type': 'application/json; charset=utf-8'
        }});

Сервер - Java Glassfish 4.1 Rest API

@Path("/update")
@POST
@Consumes(MediaType.APPLICATION_JSON + ";charset=utf-8")
@Produces(MediaType.APPLICATION_JSON + ";charset=utf-8")
public String update(String data) {
    JSONObject result = new JSONObject();
    try {
        JSONObject dataJson = new JSONObject(data);
        System.out.println("[dataJson] " + dataJson.toString());
        if (!dataJson.has("sessionId") ||
            !dataJson.has("user")) {
                result.put("success", "false");
                result.put("errorMessage", "Fields missing.");
        } else {
            int userId = (int) em.createNamedQuery("Session.findAuthorBySession")
                .setParameter("session", dataJson.getString("sessionId"))
                .getSingleResult();
            Users user = this.find(userId);

            JSONObject new_user = dataJson.getJSONObject("user");
            user.setBio(new_user.getString("bio"));
            super.edit(user);

            result.put("success", "true");
        }
    } catch (Exception e) { e.printStackTrace(); }

    return result.toString();
}

Если я печатаю контент до ответа на пост http, он выглядит нормально ('ă Ă â Â î Î ş Ş ţ Ţ'), и когда он прибывает в API Rest, он выглядит следующим образом: '? ? â Â î Î? ? ? ?".

Может быть, это то, что я пропустил, но я не могу понять, что я делаю неправильно.

Почему это происходит?

Спасибо.

ИЗМЕНИТЬ 1

Как @JoseM предложил, я посмотрел на запрос, который был отправлен на сервер, и все выглядит нормально. Если каким-то образом я чего-то не хватает, это запрос:

Запросить заголовки

Accept:application/json, text/plain, */*
Accept-Encoding:gzip, deflate
Accept-Language:en-US,en;q=0.8,ro;q=0.6,en-GB;q=0.4
Connection:keep-alive
Content-Length:95
Content-Type:application/json; charset=UTF-8
Cookie:lastMessageSeen=151; hideBanner=true; session=7d7f5c64faf243cfbb469641d4a8c9a2
Host:app.meritwork.com
Origin:http://app.meritwork.com
Referer:http://app.meritwork.com/
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36

Запросить полезную нагрузку

{sessionId: "7d7f5c64faf243cfbb469641d4a8c9a2", user: {bio: "ă Ă â Â î Î ş Ş ţ Ţ"}}

EDIT 2

Что касается библиотеки json java decoder, я печатал строку перед конструированием json-объекта, и это все равно; библиотека json не является проблемой.

  • 0
    Посмотрите на вкладку сетевых запросов в вашей и убедитесь, что отправленный запрос действительно прошел правильно. Если это так, то, возможно, это что-то еще между или, может быть, даже код библиотеки (см. Этот отчет об ошибке для аналогичной проблемы с другой библиотекой github.com/mulesoft/apikit/issues/46 )
Теги:
diacritics
rest

1 ответ

0
Лучший ответ

Я немного отлаживал код, кажется, что регистратор с Java не правильно печатал символы UTF-8, проблема все равно сохраняется, но я открыл для этого еще одну запись. Ссылки здесь: RestAPI в Java с MySQL DB: проблема с хранением данных с диакритикой

Ещё вопросы

Сообщество Overcoder
Наверх
Меню