Спецификация HTTP 1.1 указывает, что Content-Type
"должен" использоваться для указания содержимого, и что ответы, которые не включают этот заголовок, должны рассматриваться как "application / octet-stream" - другими словами, последовательность байтов, а не символов. Использование «следует» указывает, что это рекомендуемая практика, но некоторые серверы могут не следовать ей.
Итак, ваш первый шаг - поиск этого заголовка. Если его нет, не применяйте декодирование набора символов к содержимому. В случае XML, если вы передадите поток парсеру, это сработает: либо поток будет закодирован в формате UTF-8, либо пролог определит кодировку. И вам следует всегда передавать потоки напрямую в анализатор XML, не пытаясь сначала преобразовать их в строку.
Если есть заголовок Content-Type
, и он определяет набор символов, тогда вы можете декодировать в соответствии с этим набором символов. В спецификации также говорится о том, что делать с отсутствующим набором символов : для любого типа содержимого text
следует предполагать, что он закодирован с использованием ISO-8859-1.
Так что это следующий шаг: если есть набор символов, или если это text
тип носителя, примените декодирование.
В противном случае, оставить поток в покое.