vitya_brodov
@vitya_brodov
Java dev

Как это расшифровать?

При получении тело ошибки http запроса:
} catch (WebClientResponseException.NotFound notFound) {
            String errorMessage = notFound.getResponseBodyAsString();
            return MapperHelper.mapToObject(errorMessage);
        }

Если в теле содержится кириллица, то система его заменяет на ГђВќГђВµ ГђВЅГђВ°.
Вопрос: Как это расшифровать?
  • Вопрос задан
  • 209 просмотров
Решения вопроса 1
sergey-kuznetsov
@sergey-kuznetsov
Автоматизатор
Если нужен ответ на вопрос как расшифровать, то вот так:
import java.nio.ByteBuffer;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;

public class Main {

    public static void main(String[] args) {
        
        byte[] rawBytes = Charset.forName("Windows-1251")
                .encode("ГђВќГђВµ ГђВЅГђВ°").array();
        String asUTF8 = StandardCharsets.UTF_8
                .decode(ByteBuffer.wrap(rawBytes)).toString();
        byte[] bytes = StandardCharsets.ISO_8859_1
                .encode(asUTF8).array();
        String result = StandardCharsets.UTF_8
                .decode(ByteBuffer.wrap(bytes)).toString();

        System.out.println(result); // Не на ...йден...?
    }
}


Этот код не гарантирует полное восстановление конечно, но хотя бы текст станет читабельным.
Проблема в том что изначальный поток байтов utf-8 был интерпретирован как ISO-8859-1/Latin-1/ASCII, но сохранён снова как utf-8. Затем строка была выведена в консоль под видом строки Windows-1251.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы