Отличие utf 8 от windows 1251

Так как многие задают этот вопрос при выборе движка для своего сайта, хотелось бы разъяснить об особенностях UTF кодировки и для чего она нужна, а также стоит или нет переходит на эту кодировку, если ваш сайт уже стоит с использованием кодировки windows-1251.

Итак, для начала развеем миф о том, что UTF-8 является новинкой, и то что каждый сайт просто обязан ее иметь
Это неверно утверждение.
Кодировка UTF-8 предназначена исключительно для одной вещи: использование на одной странице нескольких языков, а также для организации сайтов использующих язык отличный от русского.
Кодировка windows-1251 поддерживает базовую латиницу (читайте английский язык, ну и американский соответственно), русский, украинский, белорусский, сербский. Иными словами, 1251 подходит для большинства обычных пользователей. Если вы планируете создавать международный проект, с поддержкой расширенной латиницы: немецкого, польского, французского, а также различных других языков: арабского, иврита и более сложных письмён, вам нужен именно UTF-версия.

Так же UTF-8 обладает немного большим количеством символов для некоторых сайтов это необходимо. Также по мнению некоторых UTF-8 любят зарубежные поисковики. Если ваш сайт на русском языке и вы не планируете использование какого либо другого языка, то переход на UTF лишен какого-либо смысла.

Более того для русскоязычных сайтов данная кодировка обладает рядом недостатков, а именно:

1. Размер базы данных русскоязычного сайта будет примерно на 70% больше по сравнению с использованием национальной кодировки windows-1251, что соответственно скажется на производительности сайтов с большими базами данных.

2. Шаблоны и языковые файлы для кодировки имеют специфический формат файлов (UTF формат без BOM байтов), соответственно для редактирования файлов шаблона вам понадобятся специализированные редакторы, поддерживающие этот формат. Из бесплатных это например notepad++. Сохранение этих файлов в неверном формате приведет к не читаемости вашего сайта.

3. Сторонний модуль или шаблон придется конвертировать для кодировки UTF,а большая часть из низ (90%) сделаны для кодировки windows-1251. При этом можно перевести,а вот для модулей сложнее понадобиться изменять код

Обновление сайта с кодировки windows-1251 на кодировку UTF-8:

Если вы все таки решились на обновление кодировки своего сайта, то вы должны знать, что из-за различий форматов, вы не можете просто обновить файлы скрипта и без новой установки скрипта вам не обойтись, поэтому для обновления сайта вы должны выполнить следующие шаги:

1. Сделать бекап базы данных существующего сайта в кодировке
2. Произвести новую установку скрипта используя дистрибутив скрипта для UTF версии.
3. Произвести повторные настройки скрипта для вашего сайта.
4. Сконвертировать файлы вашего шаблона в формат UTF-8 (для пакетного конвертирования мы рекомендуем использовать утилиту Sisulizer"s Kaboom), при конвертировании снимите галочку "Записывать BOM байты"
5. Скопировать файл бекапа базы данных от вашего сайта в папку /backup/, который вы делали в первом пункте.
6. Зайти в админпанель скрипта и сделать восстановление базы данных а админпанели, скрипт автоматически распознает несоответствие кодировок и при восстановлении сконвертирует базу данных в формат UTF.

Внимание: Действия по переносу сайта с кодировки windows-1251 на кодировку UTF-8 являются необратимыми и любая ошибка может привести к потери данных вашего сайта, поэтому мы настоятельно рекомендуем производить данные действия на локальном компьютере, а уже потом переносить все на рабочий сайт.

Те, у кого старые сайты, могут столкнуться с такой проблемой, что необходимо перевести файлы в кодировку UTF-8. К их числу я смело могу назвать и себя. Начала делать сайты более 10 лет назад, когда об этой кодировке было мало что известно. На всех страницах у меня стояла кодировка:

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

Сейчас уже так не пишут. На смену старому пришло новое - HTML5, где нужно прописать:

Скажу честно, все же решила я все перелопатить вручную и вот как это у меня происходило:

  1. Открывала файл в Notepad++
  2. Выделяла весть текст
  3. Копировала весь текст
  4. Переводила кодировку в UTF-8
  5. Вставляла текст
  6. Проверяла опять - в той ли кодировке стоит?
  7. Сохраняла файл

И вот два дня я так долбила один свой сайт.

Можно, конечно же и не менять ничего. Но ведь старые сайты мои давно устарели, нужно переводить их и на современную верстку HTML5 и CSS3, плюс мобильную и адаптивную верстку. И лучше это делать в более продвинутых программах, а не в Notepad++.

Короче, приуныла я. Однако приехал сын-программист и все решил!

Оказывается все уже давно придумано. И если у Вас возникла такая же проблема - не отчаивайтесь! Есть прекрасная программа UTFCast Express

Эту программу можно скачать тут - http://www.rotatingscrew.com/utfcast-express.aspx - Это условно бесплатная программа, которая умеет конвертировать текст из разных кодировок в utf8. Доступна для ОС семейства Windows.

Запускаем UTFCast Express и указываем правильные пути: сверху - что конвертировать, снизу - куда складывать конвертированные файлы. Вам нужно просто выбрать нужные директории, программа сама перекодирует все нужные файлы из папки. Нажимаем "Start".

Единственно, заранее создайте новую папку, куда программа закачает все Ваши файлы из нужной папки.


Не забудьте также поставить галочку "Copy Unconverted". Нажимаете кнопочку "Start" и программа заработала!


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

Папку с прежними файлами можете просто удалить, чтобы не занимала место и работать дальше! Вперед, к новым высотам!

Ура, товарищи!!!

Что такое вообще UTF-8

Заметьте, что UTF-8 надо обязательно писать в верхнем регистре и через черточку, то есть никаких там utf-8, utf8 или UTF8. Пишите правильно!

UTF-8 (от англ. Unicode Transformation Format, 8-bit - «формат преобразования Юникода, 8-битный») - одна из общепринятых и стандартизированных кодировок текста, которая позволяет хранить символы Юникода, используя переменное количество байт (от 1 до 6).

Стандарт UTF-8 официально закреплён в документах RFC 3629 и ISO/IEC 10646 Annex D. Кодировка нашла широкое применение в UNIX-подобных операционных системах и веб-пространстве. Сам же формат UTF-8 был изобретён 2 сентября 1992 года Кеном Томпсоном и Робом Пайком и реализован в Plan 9. В качестве BOM использует последовательность байт EF16, BB16, BF16 (что у неё самой является трёхбайтовой реализацией символа FEFF16).

Одним из преимуществ является совместимость с ASCII - любые их 7-битные символы отображаются как есть, а остальные выдают пользователю мусор (шум). Поэтому в случае, если латинские буквы и простейшие знаки препинания (включая пробел) занимают существенный объём текста, UTF-8 даёт выигрыш по объёму по сравнению с UTF-16.

: Если известно, что сайт не будет многоязычным (в обозримом будущем), не вижу причин не использовать эту кодировку (Win-1251).

И альтернативное мнение:
Цитатник веб-разработчиков.
Зайцев Артемий : Если есть возможность делать в UTF, надо делать в UTF.
Перед создателем сайтов всегда встает проблема: в какой кодировке создавать проект. В русскоязычном интернете используются две кодировки:UTF-8 (от англ. Unicode Transformation Format ) - в настоящее время распространённая кодировка, реализующая представление Юникода, совместимое с 8-битным кодированием текста.
Windows-1251 (или cp1251 ) - набор символов и кодировка, являющаяся стандартной 8-битной кодировкой для всех русских версий Microsoft Windows.

Считается, что UTF-8 - более перспективна. Но у любой вещи есть недостатки. И решение об использовании какой-то кодировки только потому, что она перспективна, без учета многих других факторов, не представляется правильным. Выбор будет оптимальным только тогда, когда он полностью учитывает все нюансы конкретного проекта. Другое дело, что предусмотреть все нюансы - само по себе весьма не просто.

Мы считаем, что использование UTF-8 предпочтительнее, но решать что выбрать - это дело разработчика проекта. А для облегчения этого выбора используйте сравнительную таблицу особенностей обоих кодировок.

Свойство UTF-8 Windows 1251
Общего характера
Многоязычность Кодировка позволяет использовать разные языки как в публичной, так и в административной части сайта.
  • Смена кодировки действующего крупного сайта с Windows-1251 на UTF-8 может вызвать серьёзные дополнительные трудовые и финансовые издержки.
  • Русский и английский без проблем работают с Windows-1251, если точно не будет потребности в других языках, то и нет потребности в UTF-8.
Большое число символов. Возможность использования спецсимволов. Есть. Но надо учитывать возможности браузеров. Штатно нет. Есть возможность замены спецсимволов на "костыли", например, © на &cорy; или × (знак умножения) на &timеs;. Однако это повышает требования к уровню подготовки контент-менеджера и создаёт проблемы при переносе данных из другой базы данных. Кроме того, вBitrix Framework есть поля, которые не используют визуальный редактор, например, название страницы или название элемента инфоблока. Это также усложняет поддержку проекта силами низкоквалифицированных сотрудников.
Скорость работы
  • При работе сайта идет подмена всех функций работы со строками наmb_* . Это значит, что весь текст будет перекодироваться в кодировку сайта.
  • utf strlen зависит от длины строки, соответственно обычныйstrlen работает в 4 раза быстрее мультибайтового: 0.0004 против 0.0013 на тысяче итераций. По замерам намониторе Производительности это выливается в 10-15% разницу в скорости работы реального сайта.
Минимизация объема проекта. Проект на UTF-8 будет заведомо "тяжелее", в силу того что строки в этой кодировке занимают в два раза больше места, чем строки в однобайтной Windows-1251. Размер сайта и базы данных будет в 1,2 - 1,5 раз больше.
Поддержка большинством js-фреймворков Поддерживается без проблем. Сложности в реализации.
Поддержка MS SQL По техническим причинам, данные в MS SQL должны храниться и хранятся в Windows-1251. Требуется дополнительная настройка. Нет проблем.
Импорт CSV Excel не сохраняет в UTF-8. Требуется пересохранение созданного файла в этой кодировке с помощью другого редактора. Нет проблем.
Импорт из 1С Сайты на UTF-8 работают без проблем при интеграции через SOAP с такими системами как, например, 1С.
Связанные с Bitrix Framework
Возможность сделать сайты в разной кодировке по системе многосайтовости. Невозможно. Все сайты на одном ядре должны быть в одной кодировке.
Поддержка на различных хостингах При работе с Bitrix Framework необходимо подключение опции phpmbstring.func_overload в значении большем или равном2 . Это разрешается не на всех хостингах . Работает на любых хостингах.
Размещение продуктов на виртуальной машинеBitrixVM . По умолчанию. Требует дополнительных действий по настройке.
Корректное отображение пунктов меню сайта При использовании данной кодировки такая проблема возможна. Решается пересохранением каждого файла в UTF-8. (Если быть точным, то рекомендуется проверить кодировку всех файлов, а не только файлов меню и, при необходимости, перекодировать и их.)
Импорт исходников в IDE, например, вeclipse pdt При выставленном в настройках проекта UTF-8, в коде ядра Битрикса портятся комментарии. Нет проблем.
Разные мелочи
Взаимодействие с WordPress (блог-клиенты, trackback и ping"и) Есть Нет
Редактирование файлов по FTP через FAR FAR поддерживает UTF только с версии 2.0. Возможно
Поддержка большинством редакторов Требуется редактор, который поддерживает кодировку UTF-8 без BOM . Нет проблем.

Как перевести сайт с кодировки win1251 в UTF-8

Общий порядок действий:

    1. Перекодировать всю базу данных в UTF-8 (вероятнее всего придётся обращаться за помощью к администратору сервера).

    2. Перекодировать все файлы сайта в UTF-8 (можно сделать своими силами).

    3. В файл /bitrix/php_interface/dbconn.php добавить строки:

define("BX_UTF" , true );

4. В файл /.htaccess добавить строки:

Php_value mbstring.func_overload 2 php_value mbstring.internal_encoding UTF-8

Перекодировать все файлы сайта в UTF-8 (второй пункт) можно выполнив команду через SSH в корневой папке сайта:

Find . -name "*.php" -type f -exec iconv -fcp1251 -tutf8 -o /tmp/tmp_file {} \; -exec mv /tmp/tmp_file {} \;