Xpoint
   [напомнить пароль]

Поскажите код, желательно на c#, что бы определить кодировку

Метки: [без меток]
2009-02-23 09:54:05 [обр] Top manager(0/2)[досье]
Поскажите код, желательно на c#, что бы определить 100% кодировку: 866 или 1251
спустя 22 минуты [обр] Василий Свиридов(47/175)[досье]

Возмите одинаковый текст приличных размеров, посчитайте распределение ASCII кодов для обоих кодировок (контрольный набор).
Если просканированный текст более или менее совпадает по распределению с контрольным набором - кодировку можно считать определённой.

Можете почитать подробнее тут (http://www.mozilla.org/projects/intl/UniversalCharsetDetection.html)

спустя 6 часов [обр] Top manager(0/2)[досье]
проблема в том, что текст угадать не возможно, а значит и наборов понадобиться бесконечно много, что не приемлемо для меня.
У меня сейчас есть вариант, в котором я проверяю текст на наличие кодов, которых просто не может быть в какой либо одной кодировке, и отсюда делаю вывод. Но практика показала, что спустя месяц интенсивной работы и десятки тысяч обработанных файлов, система все же дала сбой, определив не верную кодировку.
спустя 5 часов [обр] Василий Свиридов(47/175)[досье]

Ну, даже в том документе, на который я ссылался сказано, что определить можно только с каким-то уровнем достоверности. 100% вам никакой метод кроме живого человека не даст. Единственное, что можно предложить, это только установить порог срабатывания. Т.е. если алгоритм уверен менее чем на 80% - маркировать для инспекции вручную.

А по поводу невозможности угадывания текста - возьмите войну и мир, там текста столько, что распределение должно быть очень аккуратным (За исключением французского текста :).

спустя 17 часов [обр] Top manager(0/2)[досье]
Тута один пипл предложил идею перебрать все символы анализируемого текста через "призму" одной кодировки на предмет наличия символов в ней не входящих в ее таблицу символов, а точнее байтов. Как Вам идея? Честно говоря я даже не представляю как это сделать "не по-тупому"...
Powered by POEM™ Engine Copyright © 2002-2005