2016-10-10 8 views
3

У меня есть этот маршрут:Akka HTTP, заголовок кодировок, UTF-8 проблема

path("rus") { 
    complete("Привет!") 
} 

Когда я иду/Англ с браузера (хром) я получаю этот выход:

«ДИН € Ð ¸Ð²ÐμÑ,!»

Почему? Заголовки отклика являются:

HTTP/1.1 200 OK 
Server: akka-http/2.4.10 
Date: Mon, 10 Oct 2016 22:31:53 GMT 
Content-Type: application/json 
Content-Length: 15 

Я имел обыкновение использовать спрей, но теперь я хочу Akka HTTP, я не сталкивался с такой проблемой, как этот.

Когда я свернуться этот путь я получить нормальный выход

$ curl http://localhost:9010/rus 
"Привет!" 

Я вижу, что заголовок ответа «Content-Type» Шоуда быть «приложения/JSON, кодировка = UTF-8», но кодировка не хватает ...

+0

Каковы заголовки ответов в спрее? и какую версию akka-http вы используете? Вот обсуждения по этой теме https://github.com/akka/akka/issues/17409 https://github.com/akka/akka/issues/19260 – maks

+0

Я использую akka http 2.4.11. Заголовок ответа в брызге имеет «charset: utf-8», поэтому он работает там ... Я видел эти темы, но я не понимал, почему они закрыты и каково решение. Поскольку я понял, что это ошибка браузера, поскольку приложение/json имеет utf-8 по умолчанию, но я не понимаю, почему я не могу явно указать «charset: utf-8». –

ответ

2

Я нашел способ сParams. В настоящее время он работает

HttpEntity(ContentType(MediaTypes.`application/json`.withParams(Map("charset" -> "utf-8"))), "Привет".getBytes("UTF-8")) 
+0

Так что без этого он не работает только в хроме? – maks

+0

Вчера я попробовал firefox, и он также не работает –

4

К сожалению, это a bug in chromium. Параметр charset должен игнорироваться для application/json типа контента в соответствии с его IANA registration:

Примечание: Ни один параметр «кодировка» не определено для этой регистрации. Добавление одного действительно не влияет на совместимых получателей.