Решение 1
Предполагается, что HTTP в отсутствие определенной кодировки кодируется в ISO-8859-1 (Latin-1). И тело из его описания соответствует этому поведению. Если ответ сервера устанавливает заголовок Content-Type равным application / json; charset = utf-8 тело должно работать как положено.
Проблема, конечно, в том, что существуют серверы, которые не устанавливают charset для JSON (что допустимо), но это тоже немного серой области между двумя спецификациями:
JSON всегда должен быть UTF-8, и по этой причине говорит, что вам не нужно устанавливать кодировку, но .. HTTP всегда по умолчанию ISO-8859-1, если кодировка не установлена явно. «Умный» HTTP-клиент может выбрать более точное определение JSON, чем определение HTTP, и просто сказать, что любое приложение / json по умолчанию является UTF-8 - технически нарушая стандарт HTTP. Однако в конечном итоге наиболее надежным решением для сервера является явное указание кодировки, действительной в соответствии с обоими стандартами.
HttpClientRequest request = await HttpClient().post(_host, 4049, path) /*1*/
..headers.contentType = ContentType.json /*2*/
..write(jsonEncode(jsonData)); /*3*/
HttpClientResponse response = await request.close(); /*4*/
await response.transform(utf8.decoder /*5*/).forEach(print);
Решение 2 (трепетание)
используйте replaceAll для замените response.body
newString.replaceAll('�', '');
Решение 3 (php)
сначала используйте файл php для получения содержимого, затем используйте свой URL и используйте str_replace php
$curlSession = curl_init();
curl_setopt($curlSession, CURLOPT_URL, 'YOUR-URL');
curl_setopt($curlSession, CURLOPT_BINARYTRANSFER, true);
curl_setopt($curlSession, CURLOPT_RETURNTRANSFER, true);
$jsonData = curl_exec($curlSession);
echo $bodytag = str_replace("�", "", $jsonData);
curl_close($curlSession);
Надеюсь, это поможет.