Преобразование кодированного utf-8 JSON

Я использую этот PHP код для создания JSON из базы данных MySQL:

    while($row =mysqli_fetch_assoc($result))
        {
$emparray[] = array_map('utf8_encode', $row);
        }
        echo json_encode($emparray);

Затем я использую HttpUrlConnection для извлечения url и получения строки Echo:

  URL url = new URL("http://localhost/myserver.php");

            urlConnection = (HttpURLConnection) url.openConnection();
            InputStream in = new BufferedInputStream(urlConnection.getInputStream());
            BufferedReader reader = new BufferedReader(new InputStreamReader(in));
            result = new StringBuilder();
            String line;
            while ((line = reader.readLine()) != null) {
                result.append(line);
            }

печать:

[{"id":"1","titulo":"Cu00f3digo de Defesa do Consumidor","descricao":"Institui o cu00f3digo de defesa do consumidor","tags":"cdc","categorias":"cat_cod,cat_leisord","numero_da_lei":"13105","data_da_lei":"11111111","ativa":"1","byuser":"0","versao_da_lei":"0","url":"http://www.planalto.gov.br/ccivil_03/leis/L8078compilado.htm"}]

Я знаю, что выходные данные закодированы, потому что у меня есть$emparray[] = array_map('utf8_encode', $row);, но если я не использую это, текст, который имеет специальные символы, становится NULL.

Как я могу конвертировать

"titulo":"Cu00f3digo de Defesa do Consumidor"

к

"titulo":"Código de Defesa do Consumidor"

Я пробовал:

 new String(result.getBytes(), "UTF-8");

но ничего не изменилось

1 ответ

  1. Можно использовать библиотеку StringEscapeUtils Apache https://commons.apache.org/proper/commons-lang/download_lang.cgi

    Для сохранения unicodes в базе данных вы должны кодировать их. Так что отправляйте свои unicodes на сервер, кодируя как

    StringEscapeUtils.escapeJava("Código de Defesa do Consumidor")
    

    Для отображения кодированного unicode в android

    StringEscapeUtils.unescapeJava("C\u00f3digo de Defesa do Consumidor")