IMHO.WS

IMHO.WS (https://www.imho.ws/index.php)
-   Веб-программирование (https://www.imho.ws/forumdisplay.php?f=29)
-   -   Кодировка автоматом! (https://www.imho.ws/showthread.php?t=48064)

AleXXXSoft 08.01.2004 15:00

Кодировка автоматом!
 
Есть строка текста русского в неизвестной кодировке.
Нужно распознать, что это за кодировка (win-1251, koi8-r, etc)
Есть ли какие стандартные средства (ну или не очень стандартные) в ПХП?
Может модуль какой или набор библиотек?

Была идея разработать набор своих функций с методом частотного анализа текса, но в общем даже не знаю, может есть чего готовое?

RaZEr 08.01.2004 18:16

Не скажу, что способ изящен, но поставленную задачу он решает.

1. Перекодируем во все известные нам кодировки (точнее из них в ту, в которой работаем)
2. Преобразуем к строчным, убираем \s\t\r\n
3. Считаем буковки.

Если буковок больше (strlen/4)*3, то на 99% кодировка опознана.

PS: Сразу скажу, что способ придуман мной, и возможно существуют более прогрессивные.

Saruman 08.01.2004 18:58

AleXXXSoft
Автоматическое определение кодировки текста — 2 - теория
Простой(и ненадежный) алгоритм определения кодировки русского текста - практика, но другой вариант
Также здесь есть на си и на перле аналогичные алгоритмы

AleXXXSoft 08.01.2004 20:10

все тоже самое я удачно обнаружил в Яндексе самостоятельно, скачал, установил и попробовал, но слишком тормозные скрипты.
Вот понравилось что:

http://www.rusf.ru/books/yo/xcode.html

но так влом переносить на ПХП.... видимо так и буду его вызывать..... через систем....

а вообще хотелось что-нить типа библиотеки iconv .... но видать ЖПС вышел...

RaZEr 08.01.2004 20:13

2 AleXXXSoft: А мой вариант не подошел?

AleXXXSoft 08.01.2004 21:01

Цитата:

RaZEr:
2 AleXXXSoft: А мой вариант не подошел?
а я чегось-то не видел твоего поста.... щас попробую.... могет чего выйдет.

Добавлено через 37 минут:
таксь... а как быть с CP1251 и KOI8-R?
вот например:

рЕЯР АНКЭЬНИ РЮЙНИ РЕЯР БНР
Тест большой такой тест вот

не определишь?

Добавлено через 4 минуты:
Цитата:

RaZEr:
1. Перекодируем во все известные нам кодировки (точнее из них в ту, в которой работаем)
2. Преобразуем к строчным, убираем \s\t\r\n
3. Считаем буковки.

Если буковок больше (strlen/4)*3, то на 99% кодировка опознана.
обломс.... :(

RaZEr 08.01.2004 21:08

Цитата:

рЕЯР АНКЭЬНИ РЮЙНИ РЕЯР БНР
Обрати внимание на количество согласных. Их слишком много. Встречаются слова в которых по 5-7 согласных в ряд, а то и все слово. В русском языке такое встретишь нечасто.

Saruman 08.01.2004 21:10

Так в статье на webzone и предлагался подход по определению кодировке на основе анализа сочетаний букв - к тому же самому и ведете

AleXXXSoft 08.01.2004 21:12

:dance: ура! все-таки вот ента штучка http://tony2001.phpclub.net/detect_charset/detect.phps заработала, по крайней мере локально, осталось запустить это на сервере!

Цитата:

Saruman:
Респект тебе=)

RaZEr 08.01.2004 21:12

Тут не анализ сочетания, а три цифры - количество гласных, согласных и общее.

AleXXXSoft 08.01.2004 21:15

Цитата:

RaZEr:
quote:

рЕЯР АНКЭЬНИ РЮЙНИ РЕЯР БНР


Обрати внимание на количество согласных. Их слишком много. Встречаются слова в которых по 5-7 согласных в ряд, а то и все слово. В русском языке такое встретишь нечасто.
такой алгоритм разбора пар символов как допустимых или нет тоже работает, но он слишком медленный, поэтому он меня не устроил, а этот (выше) по скорости вполне ничего =)

Добавлено через 1 минуту:
усем спасибо (пока что) :yees:

Saruman 08.01.2004 21:23

RaZEr
Соотношение гласных и согласных в русской речи примерно 40% и 60% соответственно - приведенный тобой кусок как раз прекрасно подходит под эту статистику. Так что от анализа все равно никуда не деться, если хочешь получить более-менее точное определение.

RaZEr 08.01.2004 21:28

Цитата:

такой алгоритм разбора пар символов как допустимых или нет тоже работает, но он слишком медленный
Он не медленней алгоритма тони, - и тот и другой заполняет массивы, пробегая по тексту. Но на мой взгляд на гласные проверять надежней, потому что фраза "ГДЕ ЭТОТ СРАНЫЙ КРОТ!" это не KOI-8.

Добавлено через 2 минуты:
2 Saruman: Количество согласных в KOI больше чем в WIN. Исключения так и остаются исключениями.

AleXXXSoft 12.01.2004 18:53

и снова проблемы, нашлись такие сочетания символов в текстах, что все эти умные программки неправильно определили кодировку =(

Добавлено через 3 минуты:
буду пробовать реализовать вот этот алгоритм

Saruman 12.01.2004 19:00

AleXXXSoft
Так у Тони и написано, что его алгоритм быстрый, но ненадежный. Если нужен был надежный - сразу бы за этот и брался.

Добавлено через 4 минуты:
Кста, вот еще только что попалось:
fix-mime-charset
Сам не разбирался, интересно - смотри, вдруг чем поможет.

AleXXXSoft 12.01.2004 19:14

таксь, кое-что удалось...!

Этак лирическое отступление:
все эта лабуда нужна была для почтовика SquirrelMail.

Так вот, при установке Локали в Win1251 все само заработало, автоматическая перекодировка и т.д., но вот интерфейс русский работать перестал, стал английским по-умолчанию. Кто-нить общался с ентой софтиной, может есть какие советы?


Часовой пояс GMT +4, время: 11:40.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.