Как перевести в utf 8
High Star
Как перевести файлы в кодировку UTF-8
Те, у кого старые сайты, могут столкнуться с такой проблемой, что необходимо перевести файлы в кодировку UTF-8. К их числу я смело могу назвать и себя. Начала делать сайты более 10 лет назад, когда об этой кодировке было мало что известно. На всех страницах у меня стояла кодировка:
За эти годы некоторые мои сайты распухли до тысячи и более страниц и переделывать все эти тысячные страницы не хватит никаких сил и времени.
Скажу честно, все же решила я все перелопатить вручную и вот как это у меня происходило:
И вот два дня я так долбила один свой сайт.
Можно, конечно же и не менять ничего. Но ведь старые сайты мои давно устарели, нужно переводить их и на современную верстку HTML5 и CSS3, плюс мобильную и адаптивную верстку. И лучше это делать в более продвинутых программах, а не в Notepad++.
Короче, приуныла я. Однако приехал сын-программист и все решил!
Единственно, заранее создайте новую папку, куда программа закачает все Ваши файлы из нужной папки.
Не забудьте также поставить галочку «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.
Переводим сайт на UTF-8
«Лучше день потерять, потом за час долететь» © Крылья, ноги, хвост
Прежде чем приступить к самому скрипту, хотелось бы описать мои подходы к данной проблеме и особенности решения. Естественно я использовал любимый командный интерпретатор bash в среде Linux.
Настраиваемые параметры скрипта следующие:
А вот собственно и сам скрипт:
А теперь, еще несколько полезных моментов.
1. Возможно даже после перекодировки в UTF-8 и замены meta content на charset=UTF-8 Вы все равно видите абракадабру или не то, что хотелось бы. Здесь все дело в том, что для нового сайта в UTF-8 необходимо заменить параметр default_charset для самого PHP, т.к. в глобальных переменных он явно установлен для другой кодовой страницы (windows-1251). Я делаю это в настройках виртуального хоста (httpd.conf) через:
2. Как правило, сейчас любой сайт хочет базы данных, которые Вам то-же надо будет перевести в UTF-8. Особого труда это не составляет, если под рукой есть phpMyAdmin или mysqldump, на крайний случай, для гиганских БД, наверняка придется писать скрипт конвертации и временно приостанавливать сервис. Простота идеи должна быть понятна: делаем дамп БД, перекодируем его с помощью того-же iconv и заменяем все, что связано с кодовыми страницами на желаемые данные, заливаем все в новую БД.
Еще более правильный вариант предложенный 4m@t!c сделать это на тестируемой БД с помощью ALTER TABLE tbl_name CONVERT TO CHARACTER SET charset_name;
С БД так-же может вылезти небольшая абракадабра, проявляющаяся в некорректном отображении русских ‘ш’ ‘И’. Здесь также сыграет с нами шутку дефолтная кодовая страница для MySQL. Для устранения этой проблемы, после подключения к БД, Вам придется добавить в код Вашего сайта следующие строки:
Либо поменять default-character-set и default-collation для MySQL, если такое позволительно.
Помните. Подходите к таким переводам серьезно, сперва выполняя их на параллельной версии сайта и тестируйте, тестируйте, тестируйте.
Добавлено:
Умные люди на Хабре и среди моих читателей дали очень дельные советы, за что им огромное спасибо. В связи с этим статья намного улучшилась.
Шпаргалка по переходу на UTF-8
1. База MySQL в часности
CREATE DATABASE db_name
CHARACTER SET utf8
DEFAULT CHARACTER SET utf8
COLLATE utf8_general_ci
DEFAULT COLLATE utf8_general_ci
;
ALTER DATABASE db_name
CHARACTER SET utf8
DEFAULT CHARACTER SET utf8
COLLATE utf8_general_ci
DEFAULT COLLATE utf8_general_ci
;
ALTER TABLE tbl_name
DEFAULT CHARACTER SET utf8
COLLATE utf8_general_ci
;
2. Инсталляция mbstring
Windows
Линукс (Дебиан в часности):# aptitude install php-mbstring
3. Конфигурация mbstring
mbstring.language = Neutral ; Set default language to Neutral(UTF-8) (default)
mbstring.internal_encoding = UTF-8 ; Set default internal encoding to UTF-8
mbstring.encoding_translation = On ; HTTP input encoding translation is enabled
mbstring.http_input = auto ; Set HTTP input character set dectection to auto
mbstring.http_output = UTF-8 ; Set HTTP output encoding to UTF-8
mbstring.detect_order = auto ; Set default character encoding detection order to auto
mbstring.substitute_character = none ; Do not print invalid characters
default_charset = UTF-8 ; Default character set for auto content type header
4. Дело с небезопасными мультибайтовыми функциями в PHP
Наведу список функций, которыми нада пользоватся для правильной роботы вашего сценария:
| mail() | mb_send_mail() |
| strlen() | mb_strlen() |
| strpos() | mb_strpos() |
| strrpos() | mb_strrpos() |
| substr() | mb_substr() |
| strtolower() | mb_strtolower() |
| strtoupper() | mb_strtoupper() |
| substr_count() | mb_substr_count() |
| ereg() | mb_ereg() |
| eregi() | mb_eregi() |
| ereg_replace() | mb_ereg_replace() |
| eregi_replace() | mb_eregi_replace() |
| split() | mb_split() |
5. htmlentities() для мультибайтных строк
6. Проверка content-type хэдэров
Все просто. Меняем любой на:
header(‘Content-Type: text/html; charset=UTF-8’);
7. Проверить бинарные файлы и строки
Вам прийдется пересмостеть все-все-все и ничего не забыть =)
Сменить кодировку файла на UTF-8 в Excel
Если при импорте контактов вы видите нечитаемые символы, как на скриншоте, это значит, что кодировка файла не подходит для импорта в Unisender. Файл нужно перекодировать в UTF-8. Далее мы расскажем, как это сделать в Excel.
Переходим на вкладку «Данные», выбираем «Получение внешних данных», а далее — «Из текста».
Открывается мастер импорта текста.
С текущей кодировкой содержимое файла нечитабельное.
В поле «Формат файла» перебираем кодировки, пока не найдём ту, в которой текст отображается правильно. Вариантов много, поэтому можно начать с форматов, которые начинаются со слова «Кириллица». Находим нужный формат, нажимаем «Далее».
Выбираем символы-разделители. В нашем случае это запятая.
Нажимаем «Далее» → «Готово» → «OK».
Так выглядит импортированный текст в Excel.
Теперь нажимаем «Файл» → «Сохранить как».
Вводим название файла, тип файла выбираем CSV, ниже нажимаем «Сервис» → «Параметры веб-документа».
Переходим на вкладку «Кодировка», выбираем «Юникод UTF-8» и нажимаем «OK».
Теперь импортируем его и видим, что текст отображается корректно.
High Star









