
![]() |
Здравствуйте Гость ( Вход | Регистрация ) |
|
|
|
![]() ![]() ![]() |
![]() |
|
![]() ![]() Глухой нуб ![]() ![]() ![]() ![]() ![]() ![]() Профиль Группа: Администратор ![]() Сообщений: 17423 Пользователь №: 6543 На форуме: Карма: 327 Трезвый : 14 лет, 4 месяца, 4 дня ![]() |
Ага! Раз эта тема перед глазами, значит таки кракозяблы имели место в Вашей жизни.
![]() Итак, притча воязыцах. Кодировка или как избежать "китайской экспансии". (теория) Что же такое "кодировка" и с чем её кушать. Самое большое заблуждение, которое вносит сумятицу в неокрепшие организмы начинающих программистов, это повсеместно используемый термин "кодировка файла". Так вот. У файла нет кодировки. Нет такого понятия. Есть понятие "кодировка текста". У файла есть разные свойства - тип, размер (вес), дата создания, атрибуты и еще несколько. Но кодировки нет. Можете убедиться, посмотрев свойства любого файла (правой кнопкой -> свойства). Её там вы не найдете. А вот у текста, записанного в файл, кодировка есть. Вообще грамотно говорить не "кодировка", а "набор символов" или "таблица символов". Так что же это все таки такое и откуда растут ноги. Кодировка - это своего рода язык, который помогает компьютеру понимать вас и вам понимать компьютер. Потому что компютер оперирует машинным кодом, который, согласитесь, несколько нечитабелен. Именно он и пишется в файл. Попробуйте понять, что тут написано: 0x000000d0 0x0000009f 0x000000d1 0x00000080 0x000000d0 0x000000b8 0x000000d0 Так вот, для того, что бы это перевести, нужен словарь - таблица сопоставления. То есть компьютер должен знать, что именно рисовать в мониторе, если ему передана такая последовательность. Латинские символы кодируются везде одинаково. А вот другие отнюдь. История возникновения разнообразия кодировок чем то сродни кроссбраузерности и имеет схожее происхождение и схожие проблемы. Исторически сложилось так, что нет единого стандарта (вернее он теперь есть, но он не является обязательным). Разные разработчики ПО применяли свои таблицы, что и повлекло за собой эту путаницу. Допустим всеми любимая кодировка windows-1251 (она же CP1251) ни что иное, как изобретенная рускими крякерами таблица для подпольной русификации паленых видовских продуктов. Так как Microsoft в свое время не озаботился подобными вещами. Теперь это общепринятый стандарт. Для UNIX платформ изобрели KOI-8 и так далее. Кодировок великая куча, кто во что горазд. Все (большинство) эти таблицы имеются в читающих инструментах, к которым относятся и браузеры. Нужно только знать, какую именно применить в данный момент. А по самому файлу (или потоку данных) это сделать невозможно. И вот бедный браузер теперь в растеренности - что ему прислали и как это перевести в удобоваримую форму. Можно задать кодировку вручную, но не каждый юзер умеет это делать. По этому, что бы браузер знал, как перевести эти кракозяблы, нужно позаботиться заранее и дать ему ключ к коду (указать кодировку). Отдельно от передаваемых данных. Фактически удаленно настроить читающий инструмент. Делается это двумя способами - заголовками или специальным метатегом. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Заголовок посылает сервер, это обязательный атрибут. Метатег - вещь не обязательная и иной раз вредная. Во первых браузеры иногда глючат при работе с ним, во вторых - если случайно окажется, что сервер послал одну кодировку, а метатег укажет другую - появится неоднозначность. Метатег стоит применять только тогда, когда html файл открывается браузером напрямую, без сервера. Тогда ему просто неоткуда взять информацию о кодировке (заголовков то нету). Заставить сервер отправить нужный заголовок можно двумя способами. Вернее он и так отправит, но желательно ему указать что именно отправлять. Способ первый. Функция header() header("Content-Type: text/html; charset=utf-8"); Тут она сразу определяет контент-тип и кодировку. Способ второй. .htaccess Открываем, пишем: AddDefaultCharset UTF-8 То же самое происходит и с базами данных. Ведь любая база данных основана на тех же самых файлах и подчиняется тем же законам. Нужно обязательно указывать, с чем собираемся работать. Делается это установкой кодировки соединения. В MySQL к примеру так: mysql_query('SET NAMES utf8');, а лучше так: mysql_set_charset('utf8');если позволит версия PHP (PHP 5 >= 5.2.3) По этому очень важно соответствие содержимого файла с передаваемым атрибутом "charset". Иначе машинный код будет сопоставлен с другой таблицей и вылезут преславутые кракозяблы. Так что способ борьбы с ними один - внимательно следить за соответствием содержимого и заголовков. Сейчас есть общепринятый стандарт - UTF-8 (RFC 3629). Эта таблица содержит почти все возможные символы, которые могут встретиться в природе. Начиная от латиницы, заканчивая письменностью народов майя ![]() И чем больше народу это поймет, тем быстрее будет устранен разброд и шатание. Самым большим аргументом против, приводящимся ортодоксами в защиту местечковых кодировок - увеличение веса файлов. Дело в том, что символов очень много и описать все в пределах одного байта невозможно. От того и называется кодировка многобайтной. Соответственно нужно больше места. Но тут палка о двух концах. Во первых латиница и служебные символы в UTF-8 занимают такой же объем, как и в других. А во вторых, многие инструменты работают только с UTF (аякс, XML и прчее). Для перекодировки требуется больше гораздо больше ресурсов. Так что мой вам совет: привыкайте сразу к хорошему, все равно за этим будущее. ![]() -------------------- Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.
Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право. Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках. ![]() |
![]() |
۩
Дата
|
![]() ![]() Глухой нуб ![]() ![]() ![]() ![]() ![]() ![]() Профиль Группа: Администратор ![]() Сообщений: 17423 Пользователь №: 6543 На форуме: Карма: 327 Трезвый : 14 лет, 4 месяца, 4 дня ![]() |
Забито под продолжение
![]() -------------------- Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.
Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право. Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках. ![]() |
![]() |
|
![]() ![]() Будьте добрее, когда это возможно. А это возможно всегда. ![]() ![]() ![]() ![]() ![]() ![]() Профиль Группа: Форумчанин ![]() Сообщений: 776 Пользователь №: 16747 На форуме: Карма: 28 Трезвый : 12 лет, 4 месяца, 5 дней ![]() |
twin
Спасибо за статью, жду продолжение! |
![]() |
|
![]() ![]() Мимо проходил ![]() ![]() ![]() ![]() ![]() ![]() Профиль Группа: Форумчанин ![]() Сообщений: 1466 Пользователь №: 16492 На форуме: Карма: 17 ![]() |
Не в обиду phz, а токмо ради удобства пользования, предлагаю лишние сообщения удалить, и тему закрыть.
|
![]() |
۩
Дата
|
![]() ![]() Глухой нуб ![]() ![]() ![]() ![]() ![]() ![]() Профиль Группа: Администратор ![]() Сообщений: 17423 Пользователь №: 6543 На форуме: Карма: 327 Трезвый : 14 лет, 4 месяца, 4 дня ![]() |
Пока не надо, уже один ляп нашли. Может кто посоветует чего, потом почистим.
-------------------- Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.
Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право. Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках. ![]() |
![]() |
|||
![]() ![]() Сидел он, дум великих полон - и вдаль глядел ![]() ![]() ![]() ![]() ![]() ![]() Профиль Группа: Эксперт ![]() Сообщений: 15860 Пользователь №: 4190 На форуме: Карма: 490 ![]() |
По-моему, в статье не хватает вводной части. Целого абзаца объемом этак в 5-10 полновесных предложений. Как раз о том, где и как проявляются эти проблемы. Представьте, что статью начинает читать начинающих кодер. Он изначально не поймет, для чего это нужно, и поэтому, скорее всего, не будет вникать вообще.
"Для перекодировки требуется больше гораздо больше ресурсов". -------------------- * Хэлп по PHP
* Описалово по JavaScript * Хэлп и СУБД для PostgreSQL * Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги. * "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С) ![]() |
||
![]() |
۩
Дата
|
![]() ![]() Глухой нуб ![]() ![]() ![]() ![]() ![]() ![]() Профиль Группа: Администратор ![]() Сообщений: 17423 Пользователь №: 6543 На форуме: Карма: 327 Трезвый : 14 лет, 4 месяца, 4 дня ![]() |
Напиши))) Я писал для тех, кто проблем уже хапнул.
-------------------- Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.
Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право. Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках. ![]() |
![]() |
|||
![]() ![]() Сидел он, дум великих полон - и вдаль глядел ![]() ![]() ![]() ![]() ![]() ![]() Профиль Группа: Эксперт ![]() Сообщений: 15860 Пользователь №: 4190 На форуме: Карма: 490 ![]() |
Вот, придумал "крючок" для статьи. При прочтении которого человек должен "зацепиться глазами" и дочитать до конца, понимая, что ему тут хотят объяснить.
-------------------- * Хэлп по PHP
* Описалово по JavaScript * Хэлп и СУБД для PostgreSQL * Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги. * "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С) ![]() |
||
![]() |
۩
Дата
|
![]() ![]() Глухой нуб ![]() ![]() ![]() ![]() ![]() ![]() Профиль Группа: Администратор ![]() Сообщений: 17423 Пользователь №: 6543 На форуме: Карма: 327 Трезвый : 14 лет, 4 месяца, 4 дня ![]() |
Чуть перефразировал, много букаф)))
-------------------- Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.
Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право. Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках. ![]() |
![]() |
|
![]() ![]() Сидел он, дум великих полон - и вдаль глядел ![]() ![]() ![]() ![]() ![]() ![]() Профиль Группа: Эксперт ![]() Сообщений: 15860 Пользователь №: 4190 На форуме: Карма: 490 ![]() |
Чё-то совсем уж перефразировал... Совсем уж не чуть-чуть
![]() -------------------- * Хэлп по PHP
* Описалово по JavaScript * Хэлп и СУБД для PostgreSQL * Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги. * "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С) ![]() |
![]() |
|
![]() Здесь живет ![]() ![]() ![]() ![]() ![]() ![]() Профиль Группа: Эксперт ![]() Сообщений: 6422 Пользователь №: 5552 На форуме: Карма: 165 ![]() |
Слово "китайской" осталось...
-------------------- Свои мозги еще никто не отменял.
Телепатов нету. |
![]() |
|
![]() Be prepared ![]() ![]() ![]() ![]() ![]() ![]() Профиль Группа: Эксперт ![]() Сообщений: 5199 Пользователь №: 17723 На форуме: Карма: 57 ![]() |
Еще какое-то вроде. Кажется, "эта"...
|
![]() |
۩
Дата
|
![]() ![]() Глухой нуб ![]() ![]() ![]() ![]() ![]() ![]() Профиль Группа: Администратор ![]() Сообщений: 17423 Пользователь №: 6543 На форуме: Карма: 327 Трезвый : 14 лет, 4 месяца, 4 дня ![]() |
Ну много букаф, правда. Это же не рекламная статья, зачем столько воды во вступлении
-------------------- Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.
Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право. Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках. ![]() |
![]() |
|||
![]() Здесь живет ![]() ![]() ![]() ![]() ![]() ![]() Профиль Группа: Эксперт ![]() Сообщений: 6422 Пользователь №: 5552 На форуме: Карма: 165 ![]() |
По мне, так всю статью можно было уместить в 4 строки. -------------------- Свои мозги еще никто не отменял.
Телепатов нету. |
||
![]() |
۩
Дата
|
![]() ![]() Глухой нуб ![]() ![]() ![]() ![]() ![]() ![]() Профиль Группа: Администратор ![]() Сообщений: 17423 Пользователь №: 6543 На форуме: Карма: 327 Трезвый : 14 лет, 4 месяца, 4 дня ![]() |
По мне тоже. Но это не для нас ведь.
-------------------- Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.
Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право. Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках. ![]() |
![]() |
![]() ![]() ![]() |