Написать нам







Создаем сочные сайты!
+7 (499) 649-30-72
Написать нам
Создание сайтов






СОЗДАНИЕ САЙТОВ У НАС — ЭТО КАЧЕСТВО И РАЗУМНАЯ ЦЕНА. УБЕДИТЕСЬ САМИ!

ЗВОНИТЕ:
+7 (495) 974-15-75

Все статьи

Кодировка. Изменение кодировки текста

14.05.2009

Распространённые кодировки текста

Используемых в Интернете кодировок очень много. Для русскоязычных текстов чаще всего используется кодировка «win1251» (в некоторых программах, например, базе данных «MySql» она же обозначается как «cp1251»). В почтовых программах для отправки электронных писем может применяться кодировка «koi8». Использование этих и других разнообразных кодировок идёт ещё с давних времён, что иногда создаёт проблемы с кодировкой в настоящем.

Недавно разработанная универсальная кодировка «UTF» (Unicode Transformation Format — формат преобразования Юникода) способна закодировать более 32 000 разнообразных букв алфавитов, значков и символов. Использование этой одной кодировки для обмена данными решает все проблемы несовместимости при передаче текстов.

На заметку! Если перед Вами стоит вопрос, в какой кодировке нужно создавать сайт и размещать тексты, то отвечаем — используйте «UTF»! Это наиболее универсальное решение, но не стоит забывать, что для хранения текстов в кодировке «UTF» требуется в два раза больше места. Если Ваш сайт нацелен только на аудиторию России, то, возможно, всё-таки стоит использовать более известную в нашей стране кодировку — «cp1251». Выбор оставляем за Вами.

Конечно, нам легко советовать: используйте «UTF»! Но до появления Юникода слишком много информации на сайтах было размещено с использованием других кодировок. В настоящее время часто встаёт вопрос перекодировки текста из уже устаревающих кодировок в «UTF». В частных случаях, может потребоваться перекодирование текста в других направлениях. Но об этом, ниже.

Способы перекодировки текста

Под перекодировкой текста стоит понимать процесс конвертирования текстовых файлов, скриптов и других текстовых данных из одной кодировки в другую. Наиболее часто приходиться конвертировать тексты между следующими кодировками: win1251, koi8 и UTF. Если у Вас проблемы с другой кодировкой, то подход к решению проблемы сохраняется. Перейдём от теории к практике.

Программа «Shtirlitz»

С помощью программы «Shtirlitz» («Штирлиц») легко можно расшифровать, раскодировать русский текст или перекодировать из одной кодировки в другую. Программа разработана под ОС «Windows» и работает с большинством известных кодировок.

Если бы ни ограничения, с которыми нам однажды пришлось столкнуться, то на этом можно было бы закончить давать Вам советы по раскодировке текстов. Программы «Штирлиц» было бы достаточно для решения всех проблем.

Однажды, нашим специалистам в процессе переноса сайта на хостинг потребовалось перекодировать файл дампа базы данных «MySql» из кодировки «UTF» в «win1251». Всё бы хорошо, но дамп базы был очень большого размера (более 100 Мб). Использовать программу «Штирлиц» для смены кодировки файла не получилось, поскольку она просто зависала при работе с таким объёмом текста. Преобразовать кодировку файла удалось, написав специальный скрипт на языке PHP. Остановимся на нём поподробнее.

Скрипт на PHP для смены кодировки текста

Приведём несколько модификаций php-скриптов для изменения кодировки файлов. Каждый из скриптов, решает свою несложную задачу. Вы можете дорабатывать их и использовать по своему усмотрению. Только обязательно делайте резервную копию важных данных перед порчей ;).

Задача 1. Смена кодировки файла

Пример кода PHP для изменения кодировки файла с «UTF» на «win1251»:

<?
/**************
* convert1.php
**************/
$file="./tmp.txt";//путь к файлу, который необходимо перекодировать
$text=file_get_contents($file);//читаем данные из файла
#конвертируем текст из «cp1251» в «utf-8»  с помощью функции iconv()
$text=iconv("cp1251", "utf-8", $text);
file_put_contents($file, $text);//пишем данные обратно в файл
?>

Изменить кодировку одного файла Вы вполне могли бы и с помощью упомянутой ранее программы «Shtirlitz». Более интересное решение, изменение кодировок группы файлов, например, в каталоге.

Задача 2. Смена кодировки всех файлов в каталоге

Пример кода PHP для изменения кодировки с «UTF» на «win1251» у всех файлов в заданном каталоге:

<?
/**************
* convert2.php
**************/
$path="./tmp"; //путь к каталогу, в котором лежат файлы для перекодировки
$handle=opendir($path);
while ($file = readdir($handle)){
  if (is_file($path."/".$file)){
  #находим по порядку все файлы и перекодируем
    $text=file_get_contents($path."/".$file);//читаем данные из файла
    #конвертируем текст из «utf-8» в «cp1251» с помощью функции iconv()
    $text=iconv("utf-8", "cp1251", $text);
    file_put_contents($path."/".$file, $text);//пишем данные обратно в файл
  }
}
?>

Приведённые скрипты php наглядно демонстрируют использование функции iconv() для работы с кодировками. Но нашу проблему перекодировки больших по размеру файлов ни первый, ни второй скрипт не решают. Например, если размер исходного файла перед обработкой был 1 000 000 байт, то в процессе отладки мы наблюдали следующее:


//в переменной $text содержится текстовая информация из 1 000 000 символов
echo strlen($text)." байт";//1000000 байт
$text=iconv("cp1251", "utf-8", $text);
echo strlen($text)." байт";//8763 байт

Т.е. видно, что после применения функции iconv над длинной строкой мы получали урезанную до 8763 символов строку. При этом урезанная строка имела правильную нужную нам кодировку. К сожалению, мы не смогли понять странное поведение функции iconv() при работе с длинной строкой текста.

Проблему удалось решить следующим способом. Мы стали разбивать большой текст на части и передавать их на обработку в функцию iconv.

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

Задача 3. Смена кодировки большого файла

Пример кода PHP для изменения кодировки с «UTF» на «win1251» у большого файла:

<?
/**************
* convert3.php
**************/
$file="./tmp.txt";//путь к файлу, который необходимо перекодировать
$arr=file($file);//читаем данные из файла в массив построчно
$cnt=count($arr);//число прочитанных строк из файла
$text=””;
for($i=0; $i<$cnt; $i++){
  #конвертируем короткие строки из «utf-8» в «cp1251» с помощью функции iconv()
  $text.=iconv("utf-8", "cp1251", $arr[$i]);
}
file_put_contents($file, $text);//пишем данные обратно в файл
?>

Вот таким вот способом нам удалось перекодировать файл большого размера из одной кодировки в другую.

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

Желаем Вам находить выход из любой сложной ситуации!


Ещё рекомендуем прочитать:

Зачем нужен сайт? Всё о пользе создания своего сайта
Разработчиков сайта Министерства обороны России подозревают в крупных хищениях
Создание простых сайтов
За создание сайта о культурном наследии России обещают 76 млн рублей
За апгрейд сайта госзакупок обещают 26 млн долларов

Внимание!
Цитирование авторских материалов допускается только при условии прямой гиперссылки на «Introweb.ru»!


К списку статей



+7 (495) 974-15-75