У нас есть некоторые проблемы с кодировкой UTF-8 в многочастных формах.По умолчанию - application/x-www-form-urlencoded
отлично работает.
У нас есть следующая структура:
Браузер -> WebServer (Apache) -> AppServer (Spring Boot / w Zuul для маршрутизации) -> ...
Мы отправляем многочастную форму enctype="multipart/form-data"
, в основном без файла.Вот как выглядит Браузер (Пример формы):
![Form example](https://i.stack.imgur.com/23CZu.png)
Так выглядят данные в приложении Spring
SystemOut O DEFAULT ENCODING >>> UTF-8 ///request.getCharacterEncoding()
SystemOut O Request HEADER Name - Content-Length, Value - 254
SystemOut O Request HEADER Name - Cache-Control, Value - max-age=0
SystemOut O Request HEADER Name - Upgrade-Insecure-Requests, Value - 1
SystemOut O Request HEADER Name - Content-Type, Value - multipart/form- data; boundary=----WebKitFormBoundaryk2QfSBFSnZZ4om4N
SystemOut O Request HEADER Name - User-Agent, Value - Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
SystemOut O Request HEADER Name - Accept, Value - text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
SystemOut O Request HEADER Name - Accept-Encoding, Value - gzip, deflate, br
SystemOut O Request HEADER Name - Accept-Language, Value - de,en-US;q=0.9,en;q=0.8
SystemOut O Request HEADER Name - Front-End-Https, Value - on
SystemOut O Request PARAMETER Name - password, Value - Value_????
SystemOut O Request PARAMETER Name - username, Value - Key_??????
с "???"будучи оригинальными персонажами.
Мы определили фильтр для отладки (UTF8Filter
, который печатает Sysout выше) в web.xml
:
<!-- Set UTF-8 before request.getParameter() is called -->
<filter>
<filter-name>UTF8Filter</filter-name>
<filter-class>something.UTF8Filter</filter-class>
</filter>
<filter-mapping>
<filter-name>UTF8Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
, также мы экспериментировали с org.springframework.web.filter.CharacterEncodingFilter
, как видно из web.xml
.
Мы используем:
- spring-boot 1.5.19.RELEASE
- spring-cloud-starter-netflix-zuul 1.4.1.RELEASE
Apache 2.4 и имеет AddDefaultCharset utf-8
.Кроме того, веб-сервер (Linux) имеет локаль с определенным utf-8.
Вопрос в том, как исправить / проанализировать (и исправить) это?
Примечание:
Это не та проблема, о которой говорилось здесь - FormHttpMessageConverter.MultipartHttpOutputMessage#getAsciiBytes(String)
, поскольку данные уже «разбиты» в первом фильтре в цепочке (UTF8Filter
), до того какFormBodyWrapperFilter
.По крайней мере, это то, что, кажется, предлагается журналами и отладкой.