Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
Страницы: (6) [1] 2 3 ... Последняя » ( Перейти к первому непрочитанному сообщению )  
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Кодировка, Спастите, кракозяблы!!!
twin  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Глухой нуб
******

Профиль
Группа: Администратор
Почтальон группы
Сообщений: 15770
Пользователь №: 6543
На форуме: 8 лет, 3 месяца, 13 дней
Карма: 299

Трезвый :
6 лет, 23 дня


Ага! Раз эта тема перед глазами, значит таки кракозяблы имели место в Вашей жизни. smile.gif Ну попробуем разобраться.

Итак, притча воязыцах.
Кодировка или как избежать "китайской экспансии". (теория)

Что же такое "кодировка" и с чем её кушать. Самое большое заблуждение, которое вносит сумятицу в неокрепшие организмы начинающих программистов, это повсеместно используемый термин "кодировка файла".

Так вот. У файла нет кодировки. Нет такого понятия. Есть понятие "кодировка текста". У файла есть разные свойства - тип, размер (вес), дата создания, атрибуты и еще несколько. Но кодировки нет. Можете убедиться, посмотрев свойства любого файла (правой кнопкой -> свойства). Её там вы не найдете.

А вот у текста, записанного в файл, кодировка есть. Вообще грамотно говорить не "кодировка", а "набор символов" или "таблица символов". Так что же это все таки такое и откуда растут ноги.

Кодировка - это своего рода язык, который помогает компьютеру понимать вас и вам понимать компьютер. Потому что компютер оперирует машинным кодом, который, согласитесь, несколько нечитабелен. Именно он и пишется в файл. Попробуйте понять, что тут написано:
0x000000d0 0x0000009f 0x000000d1 0x00000080 0x000000d0 0x000000b8 0x000000d0 
0x000000b2 0x000000d0 0x000000b5 0x000000d1 0x00000082 0x0000002c 0x00000020
0x000000d0 0x0000009c 0x000000d0 0x000000b8 0x000000d1 0x00000080 0x00000021


Так вот, для того, что бы это перевести, нужен словарь - таблица сопоставления. То есть компьютер должен знать, что именно рисовать в мониторе, если ему передана такая последовательность. Латинские символы кодируются везде одинаково. А вот другие отнюдь.

История возникновения разнообразия кодировок чем то сродни кроссбраузерности и имеет схожее происхождение и схожие проблемы. Исторически сложилось так, что нет единого стандарта (вернее он теперь есть, но он не является обязательным). Разные разработчики ПО применяли свои таблицы, что и повлекло за собой эту путаницу.

Допустим всеми любимая кодировка 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). Эта таблица содержит почти все возможные символы, которые могут встретиться в природе. Начиная от латиницы, заканчивая письменностью народов майя smile.gif По этому работать с ней легко и приятно, никаких неоднозначностей. И никаких кракозяблов.
И чем больше народу это поймет, тем быстрее будет устранен разброд и шатание.

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

Так что мой вам совет: привыкайте сразу к хорошему, все равно за этим будущее. smile.gif


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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Зачем ворошить старое, когда можно наворотить новое?

user posted image
PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
twin  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Глухой нуб
******

Профиль
Группа: Администратор
Почтальон группы
Сообщений: 15770
Пользователь №: 6543
На форуме: 8 лет, 3 месяца, 13 дней
Карма: 299

Трезвый :
6 лет, 23 дня


Забито под продолжение smile.gif


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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Зачем ворошить старое, когда можно наворотить новое?

user posted image
PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
phz  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Будьте добрее, когда это возможно. А это возможно всегда.
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 776
Пользователь №: 16747
На форуме: 7 лет, 11 месяцев, 15 дней
Карма: 28

Трезвый :
4 года, 24 дня


twin
Спасибо за статью, жду продолжение!
PMПисьмо на e-mail пользователюICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Bezdna  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Мимо проходил
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1381
Пользователь №: 16492
На форуме: 8 лет, 17 дней
Карма: 17




Не в обиду phz, а токмо ради удобства пользования, предлагаю лишние сообщения удалить, и тему закрыть.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
twin  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Глухой нуб
******

Профиль
Группа: Администратор
Почтальон группы
Сообщений: 15770
Пользователь №: 6543
На форуме: 8 лет, 3 месяца, 13 дней
Карма: 299

Трезвый :
6 лет, 23 дня


Пока не надо, уже один ляп нашли. Может кто посоветует чего, потом почистим.


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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Зачем ворошить старое, когда можно наворотить новое?

user posted image
PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
sergeiss  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Сидел он, дум великих полон - и вдаль глядел
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 15110
Пользователь №: 4190
На форуме: 8 лет, 11 месяцев, 10 дней
Карма: 448




По-моему, в статье не хватает вводной части. Целого абзаца объемом этак в 5-10 полновесных предложений. Как раз о том, где и как проявляются эти проблемы.

Представьте, что статью начинает читать начинающих кодер. Он изначально не поймет, для чего это нужно, и поэтому, скорее всего, не будет вникать вообще.


Цитата (twin @ 31.03.2010 - 10:59)
И на перекодировку ресурсов уходит гораздо больше.

"Для перекодировки требуется больше гораздо больше ресурсов".


--------------------
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
PMICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
twin  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Глухой нуб
******

Профиль
Группа: Администратор
Почтальон группы
Сообщений: 15770
Пользователь №: 6543
На форуме: 8 лет, 3 месяца, 13 дней
Карма: 299

Трезвый :
6 лет, 23 дня


Напиши))) Я писал для тех, кто проблем уже хапнул.


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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Зачем ворошить старое, когда можно наворотить новое?

user posted image
PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
sergeiss  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Сидел он, дум великих полон - и вдаль глядел
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 15110
Пользователь №: 4190
На форуме: 8 лет, 11 месяцев, 10 дней
Карма: 448




Вот, придумал "крючок" для статьи. При прочтении которого человек должен "зацепиться глазами" и дочитать до конца, понимая, что ему тут хотят объяснить.

Цитата
Случалось ли вам неожиданно наткнуться на "китайскую грамоту", при выполнении некоторых простых манипуляций с данными? Например, делается выборка из БД, данные выводятся в браузер, всё делается "ну прямо по примеру из очень хорошего учебника!". А в браузере видны "иероглифы". Заходим в программу работы с БД - а там всё нормально...

Испытывали ли вы это чувство беззащитности и безысходности, когда не знаешь, что делать? Когда приходишь на программерсий форум и начинаешь кричать "Помогите!!!"

Было такое? Если ответ "да", то тогда эта статья - для вас!


--------------------
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
PMICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
twin  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Глухой нуб
******

Профиль
Группа: Администратор
Почтальон группы
Сообщений: 15770
Пользователь №: 6543
На форуме: 8 лет, 3 месяца, 13 дней
Карма: 299

Трезвый :
6 лет, 23 дня


Чуть перефразировал, много букаф)))


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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Зачем ворошить старое, когда можно наворотить новое?

user posted image
PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
sergeiss  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Сидел он, дум великих полон - и вдаль глядел
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 15110
Пользователь №: 4190
На форуме: 8 лет, 11 месяцев, 10 дней
Карма: 448




Чё-то совсем уж перефразировал... Совсем уж не чуть-чуть blink.gif


--------------------
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
PMICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
waldicom  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 6229
Пользователь №: 5552
На форуме: 8 лет, 6 месяцев, 10 дней
Карма: 163




Слово "китайской" осталось...


--------------------
Свои мозги еще никто не отменял.
Телепатов нету.
PM
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
glock18  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Be prepared
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 5199
Пользователь №: 17723
На форуме: 7 лет, 8 месяцев, 4 дня
Карма: 57




Еще какое-то вроде. Кажется, "эта"...
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
twin  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Глухой нуб
******

Профиль
Группа: Администратор
Почтальон группы
Сообщений: 15770
Пользователь №: 6543
На форуме: 8 лет, 3 месяца, 13 дней
Карма: 299

Трезвый :
6 лет, 23 дня


Ну много букаф, правда. Это же не рекламная статья, зачем столько воды во вступлении


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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Зачем ворошить старое, когда можно наворотить новое?

user posted image
PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
waldicom  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 6229
Пользователь №: 5552
На форуме: 8 лет, 6 месяцев, 10 дней
Карма: 163




Цитата (twin @ 31.03.2010 - 13:36)
Ну много букаф, правда. Это же не рекламная статья, зачем столько воды во вступлении

По мне, так всю статью можно было уместить в 4 строки.


--------------------
Свои мозги еще никто не отменял.
Телепатов нету.
PM
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
twin  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Глухой нуб
******

Профиль
Группа: Администратор
Почтальон группы
Сообщений: 15770
Пользователь №: 6543
На форуме: 8 лет, 3 месяца, 13 дней
Карма: 299

Трезвый :
6 лет, 23 дня


По мне тоже. Но это не для нас ведь.


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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Зачем ворошить старое, когда можно наворотить новое?

user posted image
PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темыСтраницы: (6) [1] 2 3 ... Последняя » Ответ в темуСоздание новой темыСоздание опроса