Игорёк
Новичок
Преобразование кодировок в письмах
Здравствуйте, уважаемые!
Я сейчас пишу скрипт, который должен брать почтовые сообщения
в "сыром" формате и выводит их на экран в читабельном виде.
За основу я взял класс mimeDecode. Он неплохо конвертирует
сообщение, но он не работает с кодировками.
Пришлось работу с кодировками дописывать самому:
сделал разбор windows-1251, koi8-r, iso, досовские и т.д.
(даже и не думал, что их так много). Строки с этими кодировками
нормально преобразуются функциями strtr, convert_cyr_str.
Вопрос первый:
--------------
Я обнаружил, что сообщения
могут быть в какой-то непонятной кодировке utf-8.
Объясните, что это за чудо? Может быть есть готовые
или написанные кем-то функции для преобразования
текста из этой кодировки? Только чтобы они
не были завязаны на imap и другие модули,
которые могут быть не установлены у хостера.
Есть, правда utf8_decode, но она как-то странно
работает - на выходе какая-то ерунда.
В форуме на этот вопрос ответы - "пиши перекодировщик сам".
Может кто-нибудь написал и поделится?
Вопрос второй:
--------------
Если кодировка текста не указана, то мне приходится догадываться.
Предположим, я не знаю, в какой из кодировок текст: koi8-r,
windows-1251, iso и т.д. Я делаю следующее: конвертирую строку
несколько раз из разных кодировок
koi8-r => win-1251
iso => win-1251
dos => win-1251
И каждый из трех полученных экземпляров анализирую
на соответствие нормальному русскому тексту. Кодировку
выбираю по тому варианту, который лучше всего подходит
по критерию соответствия. Критерий соответствия предполагаю сделать
такой - в русском тексте одни пары рядом стоящих букв встречаются
чаще, чем другие. Некоторые, например ЯЫ ЦЙ и т.д. вообще не встречаются.
Нормальным текстом будем считать тот, в котором частота появления
соответствующих пар наиболее близка к требуемой.
Вопрос состоит в следующем: может быть похожая функция уже
кем-то написана? Чтобы мне не изобретать велосипед.
Здравствуйте, уважаемые!
Я сейчас пишу скрипт, который должен брать почтовые сообщения
в "сыром" формате и выводит их на экран в читабельном виде.
За основу я взял класс mimeDecode. Он неплохо конвертирует
сообщение, но он не работает с кодировками.
Пришлось работу с кодировками дописывать самому:
сделал разбор windows-1251, koi8-r, iso, досовские и т.д.
(даже и не думал, что их так много). Строки с этими кодировками
нормально преобразуются функциями strtr, convert_cyr_str.
Вопрос первый:
--------------
Я обнаружил, что сообщения
могут быть в какой-то непонятной кодировке utf-8.
Объясните, что это за чудо? Может быть есть готовые
или написанные кем-то функции для преобразования
текста из этой кодировки? Только чтобы они
не были завязаны на imap и другие модули,
которые могут быть не установлены у хостера.
Есть, правда utf8_decode, но она как-то странно
работает - на выходе какая-то ерунда.
В форуме на этот вопрос ответы - "пиши перекодировщик сам".
Может кто-нибудь написал и поделится?
Вопрос второй:
--------------
Если кодировка текста не указана, то мне приходится догадываться.
Предположим, я не знаю, в какой из кодировок текст: koi8-r,
windows-1251, iso и т.д. Я делаю следующее: конвертирую строку
несколько раз из разных кодировок
koi8-r => win-1251
iso => win-1251
dos => win-1251
И каждый из трех полученных экземпляров анализирую
на соответствие нормальному русскому тексту. Кодировку
выбираю по тому варианту, который лучше всего подходит
по критерию соответствия. Критерий соответствия предполагаю сделать
такой - в русском тексте одни пары рядом стоящих букв встречаются
чаще, чем другие. Некоторые, например ЯЫ ЦЙ и т.д. вообще не встречаются.
Нормальным текстом будем считать тот, в котором частота появления
соответствующих пар наиболее близка к требуемой.
Вопрос состоит в следующем: может быть похожая функция уже
кем-то написана? Чтобы мне не изобретать велосипед.