]]>
]]>

Разбираем кракозябрыОтличное решение для преобразования всевозможных кракозябр на русском языке в неизвестной кодировке в виндовозную кодировку Windows-1251, которое является просто необходимым решением при написании всяческих парсеров контента и тому подобных скриптах, было найдено мной в процессе поиска на просторах интернета.

В частности у меня была проблема несовпадения кодировок на различных сайтах, и в процессе стягивания контента с одного на другой текст доставлялся в виде красивых, однако нифига ни разу не понятных кракозябр, а стандартные средства php, типа iconv и mbstring, не могли распознать, что же это за получившаяся в процессе конвертирований кодировка…

Решение было найдено у Юрия Попова в виде модуля charset_x_win. Большой респект и спасибо ему за это!

Описание:

string charset_x_win(string $s);

где $s — cтрока в неизвестной кодировке. В текущей версии функции эта строка может быть в одной из кодировок: windows-1251, koi-8r, utf-8. Строка должна быть на русском языке.

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

Функция правильно обрабатывает буквы Ё,ё и символы «».

Функция специальным образом оптимизирована для конвертирования коротких фраз. Суть оптимизации состоит в подсчёте недопустимых двух- и трёх-символьных последовательностей для слов русского языка. Для конвертирования больших текстов вполне подходят и более простые методы, состоящие в простом подсчёте допустимых/недопустимых символов.

Однако функция может быть использована и для конвертирования текстов значительных размеров. При конвертировании больших текстов для анализа кодировки используется начальный фрагмент текста, в котором содержится 256 символов с кодом больше 127.

Работа функции состоит в следующем. Исходная строка последовательно конвертируется из всех предусмотренных кодировок в кодировку windows-1251. Для каждого варианта конвертирования определяется некоторый числовой вес, который соответствует степени корректности фразы на русском языке. Этот вес зависит от следующих параметров входной строки:

  1. количество «хороших символов».
    Хорошими считаются символы, соответствующие буквам А-Я и а-я. Чем больше хороших символов, тем выше вероятность того, что кодировка — правильная.
  2. количество «плохих символов».
    Плохими считаются символы, с кодом больше 127, но которые не соответствуют буквам А-Я и а-я. Чем больше плохих символов, тем меньше вероятность того, что кодировка — правильная.
  3. количество недопустимых последовательностей из двух и из трёх символов в русском языке.
  4. Считается, что в русском языке не могут встретиться, например, последовательности из двух символов такие как «аы» или «нъ» или из трёх символов, например, такие как «юаа» или «йвб». Чем больше в строке таких последовательностей, тем меньше вероятность того, что кодировка — правильная.

    Пример использования функции charset_x_win().

    echo charset_x_win('ЮЕМПЧЕЛ')."<br />";
    echo charset_x_win('юемпчел')."<br />";
    echo charset_x_win('человек')."<br />";
    echo charset_x_win('ЧЕЛОВЕК')."<br />";
    echo charset_x_win("человек")."<br />";
    echo charset_x_win("ЧЕЛОВЕК")."<br />";

    Результат выполнения этого примера:

    человек
    ЧЕЛОВЕК
    человек
    ЧЕЛОВЕК
    человек
    ЧЕЛОВЕК

    Собственно сам скрипт здесь.

    ]]>
    ]]>

    Еще можно почитать:

    1. XAMPP, или Великолепный аналог Denwer под Linux, Windows, MacOS
    2. Русские ID3-теги в AmaroK и совместимость с Windows
    3. Приятные впечатления от Windows 7
    4. Совместное существование Windows Vista и Ubuntu Linux
    5. Microsoft работает над новой ОСью. Не Windows…
    6. Лицо Ubuntu назвал три преимущества Linux перед Windows 7
    7. Mandriva vs (K)ububtu, или мысли о дистрибутивах
    8. Установить rpm-пакет в *ubuntu? Да не вопрос!
    9. Выбрал для себя Google Chrome
    10. Десяток факторов, определяющих запрограммированность на бедность

    Эту страницу находят, например, по запросам: 

    • преобразователь кодировки во флеш
    • конвертировать неизвестную кодировку
    • iconv firefox
Понравился материал? Подпишись на RSS этого блога!

Комментарии [3 комментария] на "Преобразование строки неизвестной кодировки в windows-1251"

  1. Валера:

    надо будет добавить koi-8u и преобразование не только в 1251

  2. Сергей:

    А где-нибудь такой он-лайн модуль есть, чтобы в любой момент можно было зайти и преобразовать?

  3. Андрюха:

    Кафедра ПМИ, приятно видеть знакомые лица :)

]]>]]>