Точное автоматическое определение кодировки. Либы есть?

alekciy

Новичок
Точное автоматическое определение кодировки. Либы есть?

Хотел узнать, существуют ли готовые библиотеки которые автоматически могут точно определить в какой кодировке символы в строке? С utf еще как-то более менее понятно, там еще различить можно, а вот для ANSI?

К примеру такая, которая может в автоматическом режими однозначно отличить KOI8-R от Windows-1251 или cp866? Через поиск находятся упоминания только mb_detect_encoding(), но она отрабатывает для этого случая не корректно.

Ситуация, когда такая либа нужна типична, получаем файл с сервера, но не в Meta теге, ни в HTTP заголовке упоминания кодировки нет, либо она задана неверно (бывает грешат этим в Meta теге).
Просто появилась тут идея, хочется уточнить, не изобретаю ли велосипед.
 

SiMM

Новичок
> точно определить в какой кодировке символы в строке
В общем случае это невозможно, для частных - в поиск по форуму - упоминаются неоднократно.
 

Wicked

Новичок
есть вероятностное распознавание - можно принять на веру, что в тексте в среднем 10% заглавных букв. Тогда koi-8 отличается от win на раз, пока тебе не попадется текст, НАПИСАННЫЙ БЛОНДИНКОЙ :)
 

AmdY

Пью пиво
Команда форума
на довольно популярном русскоязычном ресурсе буквально вчера или даже сегодня писали о подобной либе http://code.google.com/p/phplangautodetect/
кстати, когда я попытался найти её в гугле, мне выдало эту статью первой же ссылкой
 

alekciy

Новичок
Автор оригинала: AmdY
на довольно популярном русскоязычном ресурсе буквально вчера или даже сегодня писали о подобной либе http://code.google.com/p/phplangautodetect/
кстати, когда я попытался найти её в гугле, мне выдало эту статью первой же ссылкой
нет, это не то. Собственно автор запостил данные о своей либе на хабре http://habrahabr.ru/blog/php/44529.html , но она определяет язык текста, а не кодировку. Там я уже автору несколько комментариев отписал.

Собственно эта тема и породила данную. Прочитывая топик я меня появилась одна мысль, но прежде чем приступить к реализации решил уточнить, не появилось ли что либо новое, что позволяло бы однозначно автоматически распознать кодировку. Я конечно знаю, что файл не содержит мета информации описывающей кодировку файла. Да и понятно, что задача это из разряда "открыть сейф когда ключ от сейфа лежит в самом сейфе". По данному вопросу я шерстил поиск с полгода назад, но может за это время возникли какие либо сдвижки в этом направлении. Видимо нет.
 

Baranov_Dron

Новичок
Как-то попалась статейка, http://popoff.donetsk.ua/text/work/libs/a/charset/
Код не смотрел, предложенный там. Но задача близка.
Там ещё дана ссылка на другую статью
"Иван Рощин. Автоматическое определение кодировки текста(http://ivr.webzone.ru/articles/defcod_2/index.htm)"
Но я чесно особо не читал, практической необходимости не было. Но тема интересная.
Если автор темы(alekciy) найдёт решение проблемы, просьба поделится информацией!
 

alekciy

Новичок
Baranov_Dron
Либа по первому линку отрабатывает неверно. Почему или что сделано не так не понятно. На форум я им уже отписал, ждем реакции.

Вторая либа на С, но меня то вопрос интерисует в контексте PHP. Понятно, что можно библиотеку скомпилить и вызвать, но 1) цикл работы с компилируемым языком представляю, но на практике ни когда не работал, поэтому в свои танцы с бубном вокруг компилятора не верю; 2) автор первой либы явно базируется на алгоритме изложенным автором второй статьи, поэтому есть большие сомнения в корректной работе второй либы. Поэтому вопрос видимо пока остается открытым.
 

fixxxer

К.О.
Партнер клуба
Автор оригинала: Wicked
есть вероятностное распознавание - можно принять на веру, что в тексте в среднем 10% заглавных букв. Тогда koi-8 отличается от win на раз, пока тебе не попадется текст, НАПИСАННЫЙ БЛОНДИНКОЙ :)
если ввести дополнительную поправку на часто используемые буквы, то вероятность ошибки еще снижается ;)
проверено на детекторе поисковых фраз (а они весьма короткие) - ошибок процента 2.
 

alekciy

Новичок
Wicked
Ну блондинок можно пока не учитывать. Да и потом, если у нас 3 возможных кодировки, то можно просто делать перевод в нижний регистр, проверку и делать вывод уже. Ведь одна из проверок даст true, разве нет?

А что с cp866?
 

p0is0n

Новичок
Wicked, да так просто кинул)
alekciy есть на питоне либа http://chardet.feedparser.org/ редко грешит)
 

alekciy

Новичок
p0is0n
Ну питона я не знаю, у меня его нет. Поэтому с ходу провести тест не получиться. Но учитывая опыт работы с предыдущими, закрадываются некоторые сомнения в эффективности.
 

dimagolov

Новичок
alekciy, не понимаю, чего ты добиваешься. что тебе не предложат - все плохо и работать наверное не будет. чего тогда тему создавал?
 

alekciy

Новичок
Юрий Попов достаточно быстро отреагировал на мой пост. Разобрались в чем дело и можно сказать, что либа действительно нормально отрабатывает KOI8-R. Вопрос по cp866 пока висит.
 

alekciy

Новичок
dimagolov
Я не говорю, что плохо или не будет работать. Я просто говорю том, что реально протестировал и результаты этого теста.

А задача простая. Я пишу небольшой веб сервис который принимает на вход ссылку, обрабатывает ответ и выдает на клиен результат. Поэтому для корректной обработки текста, полученного по ссылке, хочу однозначно знать кодировку ответа от сервера. Причем даже иметь возможность проверки корректности Content-Type заголовка, т.к. он в ответе сервера не всегда есть или не всегда его значение правильное.

Конечно, можно было бы пытаться управлять выдачей данных удаленного сервера через Accept-Charset, но при неправильных настройках сервака это не вызымеет все равно действие.
 

alekciy

Новичок
dimagolov
Страницы нет, а вот выдача файла, да. Хотя конечно кто спорит, это в наше время уже становиться раритетом.
 
Сверху