Гость Опубликовано 23 апреля, 2001 Жалоба Поделиться Опубликовано 23 апреля, 2001 Помогите любимому серверу! Подскажите, как определить, в какой кодировке пришли данные скрипту? С наилучшими пожеланиями, Никита Мищенко. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Опубликовано 3 мая, 2001 Жалоба Поделиться Опубликовано 3 мая, 2001 Либо по content-type запроса Content-type: ....;charset=win-1251 Либо статистическим анализом (только он часто Mac и Win1251 путает по причине их похожести). Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Опубликовано 3 мая, 2001 Жалоба Поделиться Опубликовано 3 мая, 2001 Хмм... Ну первый способ ясен - через регэкспы обрезать кодировку и смотреть что и как... Но имхо это не всегда будет правильно работать?.. А алгоритм этого самого статистического анализа не подскажешь? Даже понятия не имею, что это за рыбина такая и с чем ее едят... Можно и кусок сырца (ну в смысле кода) на перле желательно выслать мне на мыло :о) Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Опубликовано 3 мая, 2001 Жалоба Поделиться Опубликовано 3 мая, 2001 Ну кода я не вышлю, и уж тем более не на перле (знаю и 3 года писал на нем, но не люблю). Тема такая ... если текст более менее большой и содержит в себе русский текст (все что с кодом <128 вообще не волнует), то есть некторая статистика повторения символов с кодами >=128. Популярных кодировок вообще всего 5: koi, win, iso, mac, dos (поддержку остальных добавить на раз). Берешь _здоровый_ русский текст в известной кодировке (Война и мир), прогоняешь через частотный анализ (считаешь кол-во символов каждого кода (128-255) и делишт на общее кол-во символов в диапазоне 128-255), получаешь табличку из 128 элементов. Это делается один раз, и лучше считать double-ами. Потом берешь текст, и конвертишь его из всех кодировок которые ты знаешь в ту, которой был исходный текст (война и мир, и делаешь тот же анализ на него. Затем считаешь среднее расхождение между полученной таблицей и оригинальной и выбираешь ту кодировку, у которой разница меньше всего. Если проверяемый текст маленький можно брать масимальное отклонение вместо среднего. Кроме этого, можно сделать 3 оригинальные таблицы для номального текста, текста написанного только строчными буквами и текста написанного только ghjbcysvb буквами. Дает хорошие результаты, если не брать кодировку mac ( она от win регистром отличается в основном). Кроме того есть еще буква 'ё', которая может находиться не там где надо В связи с этим лучше ее из анализа исключать вообще. Используя данный алгоритм в свое время был написан автоматический перекодировщик, который из белиберды (максимум 5 перекодировок текста конвертерами, вплоть до бреда win->iso/dos->win/iso->win/koi->iso/win->iso достать из этого бреда нормальный текст. ~83% вероятности полного совпадения, в любом слчае нормальная читабельность при такой цепочке из 5 перекодировок. Если их <= 3 то вообще 100% (может пробовал мало ? а в твем случае глюк может быть только если маленький текст или не осмысленный. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Опубликовано 4 мая, 2001 Жалоба Поделиться Опубликовано 4 мая, 2001 Н-да... Задачка не из легких... Но главное - все понятно! :о) Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.