Перейти к содержанию

Как определить, в какой кодировке пришли данные скрипту?


Рекомендуемые сообщения

Помогите любимому серверу!

Подскажите, как определить, в какой кодировке пришли данные скрипту?

С наилучшими пожеланиями, Никита Мищенко.

Ссылка на комментарий
Поделиться на другие сайты

  • 2 недели спустя...

Либо по content-type запроса

Content-type: ....;charset=win-1251

Либо статистическим анализом (только он часто Mac и Win1251 путает по причине их похожести).

Ссылка на комментарий
Поделиться на другие сайты

Хмм...

Ну первый способ ясен - через регэкспы обрезать кодировку и смотреть что и как... Но имхо это не всегда будет правильно работать?..

А алгоритм этого самого статистического анализа не подскажешь? Даже понятия не имею, что это за рыбина такая и с чем ее едят...

Можно и кусок сырца (ну в смысле кода) на перле желательно выслать мне на мыло :о)

Ссылка на комментарий
Поделиться на другие сайты

Ну кода я не вышлю, и уж тем более не на перле (знаю и 3 года писал на нем, но не люблю).

Тема такая ... если текст более менее большой и содержит в себе русский текст (все что с кодом <128 вообще не волнует), то есть некторая статистика повторения символов с кодами >=128.

Популярных кодировок вообще всего 5: koi, win, iso, mac, dos (поддержку остальных добавить на раз).

Берешь _здоровый_ русский текст в известной кодировке (Война и мир), прогоняешь через частотный анализ (считаешь кол-во символов каждого кода (128-255) и делишт на общее кол-во символов в диапазоне 128-255), получаешь табличку из 128 элементов. Это делается один раз, и лучше считать double-ами.

Потом берешь текст, и конвертишь его из всех кодировок которые ты знаешь в ту, которой был исходный текст (война и мир:), и делаешь тот же анализ на него. Затем считаешь среднее расхождение между полученной таблицей и оригинальной и выбираешь ту кодировку, у которой разница меньше всего.

Если проверяемый текст маленький можно брать масимальное отклонение вместо среднего. Кроме этого, можно сделать 3 оригинальные таблицы для номального текста, текста написанного только строчными буквами и текста написанного только ghjbcysvb буквами. Дает хорошие результаты, если не брать кодировку mac ( она от win регистром отличается в основном). Кроме того есть еще буква 'ё', которая может находиться не там где надо Smile В связи с этим лучше ее из анализа исключать вообще.

Используя данный алгоритм в свое время был написан автоматический перекодировщик, который из белиберды (максимум 5 перекодировок текста конвертерами, вплоть до бреда win->iso/dos->win/iso->win/koi->iso/win->iso достать из этого бреда нормальный текст.

~83% вероятности полного совпадения, в любом слчае нормальная читабельность при такой цепочке из 5 перекодировок. Если их <= 3 то вообще 100% (может пробовал мало ? Smile а в твем случае глюк может быть только если маленький текст или не осмысленный.

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...