Многоэлементные параметры пружины, закодированные в соответствии с ISO-8859-5, не отображаются должным
Я работаю над Spring Application, который должен работать с различными кодировками, отправленными через MultipartParameters.
Клиентская сторона отправляет параметры text
а также charset
и исходя из этих двух, текст с определенной кодировкой должен быть записан в базу данных.
При отправке необработанных данных в API с кодировкой ISO-8859-5 я постоянно получаю неправильные байты на стороне сервера, несмотря ни на что.
Пример:
text = АБ123
charset = ISO-8859-5
RAW(hex) = B0 B1 31 32 33
Контроллер (снятая кодировка для удобства):
@GetMapping("/process")
public String process (@RequestParam String text) {
byte[] raw = text.getBytes();
// Hex: 3F 3F 31 32 33
byte[] iso5 = text.getBytes(Charset.forName("ISO-8859-5"));
// Hex: 3F 3F 31 32 33
byte[] utf8= text.getBytes(Charset.forName("UTF-8"));
// Hex: EF BF BD EF BF BD 31 32 33
}
Глядя на эти выводы, мы видим, что в момент получения параметра String неизвестные символы уже конвертируются в ??
(3F3F
) или же ��
(EF BF BD EF BF BD
) который не оставляет места для маневра.
Естественно, я предположил, что Spring по умолчанию конвертирует в UTF-8 и метод получает только уже измененные параметры. Но даже
MultipartHttpServletRequest
и получение результатов сgetParameter("text")
дать те же результаты.
Может кто-нибудь предложить какое-то решение для этой проблемы без жесткого кодирования ISO-8859-5 для всех параметров, потому что приложение должно уметь работать и с другими кодировками.