Многоэлементные параметры пружины, закодированные в соответствии с 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 для всех параметров, потому что приложение должно уметь работать и с другими кодировками.

0 ответов

Другие вопросы по тегам