samlab, указание
предпочтений не гарантирует возврат именно в этой кодировке, равно как и автоматическую перекодировку.
Следует смотреть в ответе следующие места:
1. В заголовке HTTP-ответа, поле Content-Type. Там указан тип документа, но в доп. параметре может быть (как правило, но не обязательно) и кодировка.
http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.17В принципе, можно ограничиться только этим пунктом, но если хочется поддержать и криворуких админов, то см. п.2.
2. Если в п.1. указан text/html, то можно распарсить контент и просмотреть наличие в заголовке HTML тега^
<meta http-equiv="Conetnt-Type" content="text/html; charset=....." />
Найденную кодировку можно использовать для перекодирования исходного контента.
Этого уже должно быть более чем достаточно, но есть еще более криворукие админы и для них есть п.3.
3. Кодировку можно
попытаться определить, анализируя непосредственно контент.
Во-первых, посмотри в инете способы автоопределения UTF-16 (крайне редкий случай применения, но встречал) и UTF-8 (с BOM и без). Вероятность встретить UTF-32 стремится к нулю. На эти кодировки надо тестировать с самого начала.
Если это не Unicode, то это 8-битная кодировка. Вычисли гистограмму распределения символов по кодам и еще одну - по типам (цифра, знак, пробел, большие/маленькие латинские, большие/маленькие локальные, символы из верхнего диапазона. На основе их анализа и будешь принимать решение. Первую можно построить один раз, а вторую надо делать для каждой тестируемой кодировки.
Например, latin1 будет 99-100% укладываться в диапазон 1..127 (возможны редкие символы в диапазоне 128-255).
Многие 8-битные кодировки будут иметь значительную долю в "большие/маленькие локальные".
Определить таки кодировку точно невозможно. По этому должна быть таблица предпочтений - приоритетов проверяемых кодировок.