В моем java-приложении есть потребитель, который получает входные файлы JSON с сервера, а затем я пытаюсь преобразовать его с помощью Jackson. Но ObjectMapper выдает исключение:
com.fasterxml.jackson.databind.JsonMappingException: Invalid UTF-8 middle byte 0x2f
Насколько я понимаю, это из-за неправильной кодировки. Можно ли как-то распознать кодировку и обработать ответ сервера?
Сервер может отправить заголовок Content-Type, указывающий кодировку вместе с данными. Если кодировка не указана, по умолчанию для application/json используется UTF-8. В этом случае исправьте сервер, чтобы он отправлял правильно закодированный Json.




Мне нужно было распознать кодировку и правильно обработать данные.
Для этого я использовал UniversalDetector от org.mozilla.universalchardet.UniversalDetector.
private static final UniversalDetector DETECTOR = new UniversalDetector(null);
private static String getEncode(byte[] data) throws IOException {
DETECTOR.reset();
byte[] buf = new byte[data.length];
InputStream is = new ByteArrayInputStream(data);
int read;
while ((read = is.read(buf)) > 0 && !DETECTOR.isDone()) {
DETECTOR.handleData(buf, 0, read);
}
is.close();
DETECTOR.dataEnd();
return DETECTOR.getDetectedCharset();
}
И затем я прочитал его с правильной кодировкой:
private static String readWithEncode(byte[] data, String encoding) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(new ByteArrayInputStream(data), encoding));
StringBuilder result = new StringBuilder();
String s;
while ((s = br.readLine()) != null) {
result.append(s);
}
br.close();
return result.toString();
}
посмотри здесь stackoverflow.com/questions/6352861/…