У вас есть UTF-8 байтов, которые декодируются как ISO-8859-1.
'SÃO LUÍS', закодированный как UTF-8, приводит к следующим байтам (обозначение - Python, но принципы применяются на любом языке):
b'S\xc3\x83O LU\xc3\x8dS'
При декодировании по ISO-8859-1 получается следующая строка:
'SÃ\x83O LUÃ\x8dS'
UTF-8 - это многобайтовая кодировка, но ISO-8859-1 - это однобайтовая кодировка. В этом случае первые байты кодированных UTF-8 'Ã' и 'Í' равны \xc3
, что является кодировкой ISO-8859-1 для 'Ã'. Второй байт каждого символа не определен в ISO-8859-1, поэтому он остается неизменным в процессе декодирования.
Предполагая, что эти поврежденные данные генерируются API, вам нужно будет выполнить итерацию по десериализованным данным json и закодировать каждую строку как ISO-8859-1, а затем декодировать полученные байты как UTF-8.
>>> bad = 'SÃ\u0083O LUÃ\u008dS'
>>> bad.encode('latin-1').decode('utf-8')
'SÃO LUÍS'