Решение проблем неправильной кодировкой веб-страницы. Основа основ – кодировка ASCII и ее современные интерпретации

Цель работы: ознакомление с многообразием окружающих человека кодов, ролью и определением области практического применения кодирования информации.

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

Практическая значимость: материал статьи может быть использован в качестве дополнительного при рассмотрении вопроса о кодировании информации или как учебный материал при проведении семинарского занятия.

ВВВЕДЕНИЕ.

Фундаментальной чертой цивилизации является рост производства, потребления и накопления информации во всех отраслях человеческой деятельности. Вся жизнь человека, так или иначе, связана с получением, накоплением и обработкой информации. Что бы человек ни делал: читает ли он книгу, смотрит ли он телевизор, разговаривает, он постоянно и непрерывно получает и обрабатывает информацию.

Любой живой организм, в том числе человек, является носителем генетической информации, которая передается по наследству. Генетическая информация хранится во всех клетках организма в молекулах ДНК (дезоксирибонуклеиновой кислоты). Молекула ДНК человека включает в себя около трех миллиардов пар нуклеотидов, и в ней закодирована вся информация об организме человека: его внешность, здоровье или предрасположенность к болезням, способности и т.д.

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

Для любой операции над информацией (даже такой простой, как сохранение) она должна быть как-то представлена (записана, зафиксирована). Этот процесс имеет специальное название – кодирование информации.

ПРЕДСТАВЛЕНИЕ И КОДИРОВАНИЕ ИНФОРМАЦИИ.

История кодирования информации начинается в доисторической эпохе, когда первобытный человек выбивал в скале образы известных ему объектов окружающего мира.

Кодирование информации необычайно разнообразно. Указания водителю автомобиля кодируются в виде дорожных знаков. Музыкальное произведение кодируется с помощью знаков нотной грамоты, для записи шахматных партий и химических формул созданы специальные системы записи. Любой грамотный компьютерный пользователь знает о существовании кодировок символов. Географическая карта кодирует информацию о местности. Необходимость кодирования речевой информации возникла в связи с бурным развитием техники связи, особенно мобильной связи. Людьми были придуманы специальные коды: Азбука Брайля, азбука Морзе, флажковая азбука. Таких примеров можно приводить очень много.

Известно, что одну и ту же информацию мы можем выразить разными способами.

Например, каким образом вы можете сообщить об опасности?

  • Если на вас напали, вы можете просто крикнуть: “Караул!!” (англичанин крикнет “Неlр me!”).
  • Если прибор находится под высоким напряжением, то требуется оставить предупреждающий знак (рисунок).
  • На оживленном перекрестке регулировщик помогает избежать аварии с помощью жестов.
  • В театре пантомимы вся информация передается зрителю исключительно с помощью мимики и жестов.
  • Если ваш корабль тонет, то вы передадите сигнал “SОS” (...– – –...).
  • На флоте помимо азбуки Морзе используют также семафорную и флажковую сигнализацию.

Набор знаков, в котором определен их порядок, называется алфавитом.

Существует множество алфавитов.

  • Алфавит кириллических букв (А, Б, В, Г, Д, Е, ...)
  • Алфавит латинских букв (А, В, С, D, Е, F, ...)
  • Алфавит десятичных цифр(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
  • Алфавит знаков зодиака (^ , _ , ` , a , b , c , d , e , f , g , h , i) и др.

Имеются, однако, наборы знаков, для которых нет какого-то общепринятого порядка:

  • Набор знаков азбуки Брайля (для слепых);
  • Набор китайских идеограмм;
  • Набор знаков планет;
  • Набор знаков генетического кода (А, Ц, Г, Т).

Особенно важное значение имеют наборы, состоящие всего из двух знаков:

  • Пара знаков (+, –);
  • Пара знаков “точка”, “тире” (., –)
  • Пара цифр (0, 1).
  • Пара ответов (да, нет).

Таким образом, кодирование информации – это процесс формирования определенного представления информации. Значимость кодирования возросла в последние десятилетия в связи с внедрением ЭВМ.

C появлением компьютеров возникла необходимость кодирования всех видов информации, с которыми имеет дело и отдельный человек, и человечество в целом. Пписьменность и арифметика – есть не что иное, как система кодирования речи и числовой информации. Информация никогда не появляется в чистом виде, она всегда как-то представлена, как-то закодирована.

Основными атрибутами кодирования являются:

  • Код – это набор знаков, упорядоченных в соответствии с определенными правилами того или иного языка, для передачи информации.
  • Знак – это метка, предмет, которым обозначается что-нибудь (буква, цифра, отверстие). Знак вместе с его значением называют символом. Существует множество классификаций знаков (Приложение 1).
  • Язык – это сложная система символов, каждый из которых имеет определенное значение. Языковые символы, будучи общепринятыми и соответственно общепонятными в пределах данного сообщества, в процессе речи комбинируются друг с другом, порождая разнообразные по своему содержанию сообщения.

Код, знак и язык позволяют передавать информацию в символическом виде, удобном для ее кодирования

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

ПРАКТИЧЕСКОЕ ПРИМЕНЕНИЕ КОДИРОВАНИЯ ИНФОРМАЦИИ.

Стенография – это скоростное письмо особыми знаками, настолько краткими, что ими можно записать живую речь. Стенография пришла к нам из древнейших времен. Еще в Древнем Египте скорописцы записывали речь фараонов. Широкое распространение стенография получила в Древней Греции. В 1883 г. в Акрополе была найдена мраморная плита, на которой были высечены стенографические знаки. По мнению ученых, эти записи были сделаны в 350 г. до н.э. Но общепризнанным днем рождения стенографии считается 5 декабря 63 года до н.э. Тогда в Древнем Риме возникла необходимость дословной записи устной речи. Автором древнеримской стенографии считается Тирон – секретарь знаменитого оратора Цицерона.

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

Известно немало случаев, когда стенография оказывала неоценимую помощь людям разных профессий (Приложение 2).

Телефонный план нумерации.

В России используется закрытая десятизначная нумерация. Это значит, что любой полный телефонный номер с кодом региона или мобильной сети должен иметь 10 цифр. Это называется Национальный телефонный номер. При звонке на телефон с отличным от “домашнего” кодом региона понадобится дополнительно набирать код выхода на междугороднюю связь (“8”).

Персональные данные.

В последнее время очень актуален вопрос о персональных данных. Персональные данные человека записаны в его паспорте.

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

Штрих-коды.

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

В настоящее время в России и за рубежом ведутся большие работы по созданию автоматизированных систем обработки данных с применением машиночитаемых документов (МЧД), одной из разновидностей которых являются документы со штриховыми кодами. К машиночитаемым относятся товаросопроводительные документы, ярлыки и упаковки товаров, чековые книжки и пластиковые карточки для оплаты услуг, магнитные носители. В связи с этим появились термины “электронные ведомости”, “электронные деньги” и т. д.

Наиболее перспективным и быстроразвивающимся направлением автоматизации процесса ввода информации в ЭВМ является применение штриховых кодов.

Штриховой код представляет собой чередование темных и светлых полос разной ширины. Структура штрихового кода представлена на слайде.

По мнению специалистов, системы штрихового кодирования имеют перспективу и дают возможность решить одну из самых сложных компьютерных проблем - ввод данных.

В настоящее время штриховые коды широко используются не только при производстве и в торговле товарами, но и во многих отраслях промышленного производства.

Товарный штриховой код присваивается продукции (товару) на этапе запуска его в производство. Штрих-коды получили широкое практическое применение почти во всех сферах деятельности человека (Приложение 3) :

  • Штриховое кодирование помогает в приготовлении медицинских препаратов;
  • Превосходная сортировка;
  • Штрих-коды наводят порядок на складе;
  • Вы можете стать штрих-кодом!
  • Штрих-коды охраняют детей;
  • Общее наблюдение за частной жизнью;
  • Штрих-коды контролируют гарантийное обслуживание;
  • Штрих-коды в аэропорту избежать путаницы;
  • Штрих-коды и скоропортящиеся продукты;
  • Карты безопасности;
  • Штрих-коды следят за заключенными;
  • Газеты в будущем;
  • Штрих-коды помогают найти выгодную цену;
  • Штрих-коды как искусство;
  • Штрих-коды не пропустят `зайцев`;
  • Штрих-коды отлавливают прогульщиков;
  • Процесс выписки рецептов;
  • Штриховое кодирование и медицина;
  • Штрих-коды и гонки Формулы 1;
  • Мобильный телефон вместо билета на концерт;
  • Штрих-код охраняет детей;
  • Шифровка диагнозов заболеваний в листках нетрудоспособности?

Смайлики.

Смайликами (от smile – улыбка) в Интернете называют значки, составленные из знаков препинания, букв и цифр, обозначающие какие-то эмоции.

Смайлик – это лучший способ передать ваши чувства и эмоции при виртуальном общении! Маленькие забавные рожицы, которые вставляются в текст, избавляют от необходимости писать излияния о ваших переживаниях. Считается, что смайлик для Интернета – все равно, что для человечества колесо. Без него невозможно обойтись ни в одной форме виртуального общения. Он крайне прост в употреблении, информативен и при всей своей простоте дает широкий простор воображению. Неудивительно, что его переняли sms-коммуникация, реклама, дизайн, обычная почта, при обмене записками на уроках.

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

ЗАКЛЮЧЕНИЕ.

Мы знаем, насколько велики возможности компьютеров, и широк спектр их применения сегодня и можем только догадываться, какие задачи смогут решать они в ближайшем будущем. Поэтому особенно остро встает вопрос о знании и понимании способов представления информации в компьютере. Нужно, чтобы люди (не только программисты-профессионалы, но и простые пользователи) имели понятие о кодировании информации и о возможных способах кодирования разных видов информации.

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

  • Артур Конан Дойль “Пляшущие человечки”;
  • Эдгар По “Золотой жук”;
  • Жюль Верн “Путешествие к центру земли”;
  • Валентин Каверин “Исполнение желаний”;
  • Дэн Браун “Код да Винчи”;
  • Дэвид Кан “Взломщики кодов”.

Для наглядности представления материала может быть использованы слайды презентации из

Создание формы обратной связи

О проблемах с кодировкой файлов

При создании формы обратной связи частенько возникают проблемы с кодировкой файлов, из-за чего приходящее на E-mail письмо состоит из замечательных квадратиков, ромбиков и других "кракозяблов".

Рассмотрим это вопиющее недоразумение подробнее. Как известно, кодировка (charset) - это метод представления символов для их передачи. В конце концов, любая информация, циркулирующая в компьютере - это последовательность нулей и единиц. Кодировка символов состоит из нескольких байтов, обычно от 1 до 4. Кодировок существует множество, и браузер должен правильно определить, в какой из них написана открываемая страничка сайта.

В большинстве случаев современные браузеры успешно справляются с этой задачей самостоятельно. Однако для правильного определения кодировки принято в HTML-коде давать подсказку с помощью мета-тега, например,
или
.
.

Начинающие веб-дизайнеры иногда ошибочно считают, что достаточно вставить нужный мета-тег в начало страницы - и всё будет ОК! Это заблуждение. Как справедливо писал Козьма Прутков: "Если на клетке со слоном увидишь надпись "Буйвол" – не верь глазам своим." Необходимо не только написать, к примеру, charset=utf-8, но и проследить, что страница реально сделана в указанной кодировке .

Истинную кодировку страницы проще всего узнать, открыв её в любом браузере и выбрав в меню пункт Вид - Кодировка . Изменяя кодировки, определите, при какой из них страница отображается правильно - это и будет ваша реальная кодировка. Её и указывайте в мета-теге. Если вы хотите изменить кодировку, то для этого необходимо зайти в установки программы, с помощью которой вы создаете сайт, и задать требуемую кодировку. Например, в программе Adobe Dreamweaver для этого надо выбрать раздел меню Редактировать - Установки...- Создать документ - Кодировка по умолчанию . Обычно используют кодировки charset=utf-8 или charset=windows-1251 .

Замечание : мета-тег указания кодировки желательно размещать в самом начале HTML-кода сразу за тегом , чтобы браузер выбрал правильную кодировку уже перед выводом названия страницы (тег ...), которое показывается на синей полосе вверху окна браузера. В противном случае, вместо мы можем увидеть всё те же замечательные квадратики и ромбики.</p> </blockquote> <p>Абсолютно не нужные нам проблемы с кодировкой возникают и тогда, когда страничка сайта состоит из нескольких файлов, например, вставки фреймов, скриптов <b>JavaScript </b> и т.п. Необходимо следить, чтобы все эти части были созданы в одной кодировке. Кстати, именно для этого случая в почтовых программах, например, на mail.ru , обычно есть несколько кнопок ручного переключения кодировок, так как автоматически определить, в какой кодировке написано приходящее на почту письмо, иногда бывает затруднительно.</p> <p>Возвращаясь к нашей форме обратной связи , следует учесть, что данные о кодировке сообщения могут измениться при пересылке. Упрощенно, механизм доставки письма с формы на ваш E-mail выглядит следующим образом. Сначала письмо попадает на промежуточный почтовый ящик на сервере вашего хостинга, а уже с него посылается на указанный вами в РНР-файле адрес. Этот промежуточный ящик вы легко найдете, заглянув в панели управления вашего сайта в раздел <b>Почта </b>. Весь этот процесс происходит под управлением РНР-программы. Следовательно, в ней тоже полезно лишний раз указать правильную кодировку вашего файла.</p> <p>Для этого необходимо в РНР-файле (в нашей форме <a href="/life-hacks-for-pc/obzor-plaginov-dlya-sozdaniya-formy-obratnoi-svyazi-forma-obratnoi-svyazi.html">обратной связи</a> это <b>mail.php </b>) добавить строку заголовков (<b>headers </b>), которая служит для определения в почтовой программе некоторых дополнительных параметров письма: тип документа <b>text/plain </b> (простой текст), адрес отправителя, кодировку и др. Для нашего случая добавим следующую строчку заголовков(<b>headers </b>)с указанием кодировки:<br> $to = "pupkin@rambler.ru "; //Здесь укажите свой адрес<br> $headers = "Content-type: text/plain; charset=utf-8";<br> $subject = "Сообщение с вашего сайта";<br> $message = "Имя пославшего: $name \nЭлектронный адрес: $email \nСообщение: $mess";<br> $send = mail ($to, $subject, $message, $headers);</p> <p>Так же неплохо сообщить браузеру о правильной кодировке добавлением в РНР-страницу отправки формы обратной связи (см. "Создание формы обратной связи ") заголовка с мета-тегом<br> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />.</p> <p>Проблемы с кодировкой возникают и в том случае, если вы используете на странице скрипты для вывода какого-либо текста, например, бегущей строки, даты и т.п. Для изменения кодировки скрипта можно воспользоваться <b><a href="/ios/zacherkivanie-klavishi-bystrogo-dostupa-dlya-ms-word-excel-outlook-ustanovka.html">Microsoft Word</a> </b>. Для этого откройте документ, задайте нужную кодировку, если он выводится неверно (как это сделать, смотрите в "Справке Word"), а затем сохраните его следующим путем: <b>Файл - Сохранить как - Обычный текст - Сохранить </b>. В открывшемся окне вы можете задать необходимую кодировку, совпадающую с кодировкой вашей страницы.<br></p> <p>К сожалению, описанные <a href="/life-hacks-wi-fi/udobnye-oblegchayushchie-rabotu-priemy-v-fotoshop-prostye-pri-my.html">простые приемы</a> указания кодировки не всегда избавляют от ошибок при её определении. Иногда требуется серьезное хирургическое вмешательство в работу РНР-машины. Нужную информацию о таких операциях вы без труда, но при наличии желания, найдете в справочнике под названием "Интернет" - мышь вам в руки!</p> <p><i> 18.03.2011 г. </i></p> <ul> Ещё статьи по теме "Создание, оптимизация и раскрутка сайта": </ul> <p>Здравствуйте, уважаемые читатели блога сайт. Сегодня мы поговорим с вами про то, откуда берутся кракозябры на сайте и в программах, какие кодировки текста существуют и какие из них следует использовать. Подробно рассмотрим историю их развития, начиная от базовой ASCII, а также ее расширенных версий CP866, KOI8-R, Windows 1251 и заканчивая современными кодировками консорциума Юникод UTF 16 и 8.</p><p>Кому-то эти сведения могут показаться излишними, но знали бы вы, сколько мне приходит вопросов именно касаемо вылезших кракозябров (не читаемого набора символов). Теперь у меня будет возможность отсылать всех к тексту этой статьи и самостоятельно отыскивать свои косяки. Ну что же, приготовьтесь впитывать информацию и постарайтесь следить за ходом повествования.</p><h2>ASCII — базовая кодировка текста для латиницы</h2><p>Развитие кодировок текстов происходило одновременно с формированием отрасли IT, и они за это время успели претерпеть достаточно много изменений. Исторически все начиналось с довольно-таки не благозвучной в русском произношении EBCDIC, которая позволяла кодировать буквы латинского алфавита, арабские цифры и знаки пунктуации с управляющими символами.</p><p>Но все же отправной точкой для развития <a href="/iron/osnova-osnov-kodirovka-ascii-i-ee-sovremennye-interpretacii-reshenie-problem.html">современных кодировок</a> текстов стоит считать знаменитую <b>ASCII </b> (American Standard Code <a href="/life-hacks-for-ios/kod-bukvy-e-ascii-kodirovka-ascii-american-standard-code-for-information-interchange---bazovaya.html">for Information</a> Interchange, которая по-русски обычно произносится как «аски»). Она описывает первые 128 символов из наиболее часто используемых англоязычными пользователями — <a href="/life-hacks-for-smartphones/ascii-kody-latinskih-bukv-kodirovanie-tekstovoi-informacii.html">латинские буквы</a>, арабские цифры и знаки препинания.</p><p>Еще в эти 128 знаков, описанных в ASCII, попадали некоторые служебные символы навроде скобок, решеток, звездочек и т.п. Собственно, вы сами можете увидеть их:</p><p>Именно эти 128 символов из первоначального вариант ASCII стали стандартом, и в любой другой кодировке вы их обязательно встретите и стоять они будут именно в таком порядке.</p><p>Но дело в том, что с помощью одного байта информации можно закодировать не 128, а целых 256 <a href="/life-hacks-wi-fi/znachenie-razlichnyh-kodov-oshibok-v-windows-phone-i-ih-ustranenie.html">различных значений</a> (двойка в степени восемь равняется 256), поэтому вслед за <a href="/life-hacks/federalnaya-sluzhba-po-regulirovaniyu-alkogolnogo-rynka-federalnaya.html">базовой версией</a> Аски появился целый ряд <b>расширенных кодировок ASCII </b>, в которых можно было кроме 128 основных знаков закодировать еще и символы национальной кодировки (например, русской).</p><p>Тут, наверное, стоит еще немного сказать про системы счисления, которые используются при описании. Во-первых, как вы все знаете, компьютер работает только с числами в двоичной системе, а именно с нулями и единицами («<a href="/life-hacks-in-vk/primenenie-cifrovyh-mikroshem-primenenie-bulevoi-algebry-dlya-opisaniya.html">булева алгебра</a>», если кто проходил в институте или в школе). , каждый из которых представляет из себя двойку в степени, начиная с нулевой, и до двойки в седьмой:</p><p><img src='https://i2.wp.com/ktonanovenkogo.ru/image/kodirovka-teksta.png' width="100%" loading=lazy></p><p>Не трудно понять, что всех <a href="/life-hacks-for-windows/vozmozhnye-kombinacii-iz-5-cifr-sochetaniya-bez-povtorenii-kombinatorika-v-ms-excel.html">возможных комбинаций</a> нулей и единиц в такой конструкции может быть только 256. Переводить число из двоичной системы в десятичную довольно просто. Нужно просто сложить все степени двойки, над которыми стоят единички.</p><p>В нашем примере это получается 1 (2 в степени ноль) плюс 8 (два в степени 3), плюс 32 (двойка в пятой степени), плюс 64 (в шестой), плюс 128 (в седьмой). Итого получает 233 в <a href="/life-hacks-for-ios/kak-perevesti-iz-2-v-desyatichnuyu-kak-perevodit-iz-dvoichnoi-sistemy-v-desyatichnuyu.html">десятичной системе</a> счисления. Как видите, все очень просто.</p><p>Но если вы присмотритесь к таблице с символами ASCII, то увидите, что они представлены в шестнадцатеричной кодировке. Например, «звездочка» соответствует в Аски <a href="/life-hacks-in-vk/iz-vosmerichnoi-v-shestnadcaterichnuyu-sistemu-perevod-chisel-v-dvoichnuyu.html">шестнадцатеричному числу</a> 2A. Наверное, вам известно, что в <a href="/life-hacks-for-smartphones/b-v-shestnadcatirichnoi-sisteme-dvoichnaya-vosmerichnaya-shestnadcaterichnaya-sistemy.html">шестнадцатеричной системе</a> счисления используются кроме арабских цифр еще и латинские буквы от A (означает десять) до F (означает пятнадцать).</p><p>Ну так вот, для <b>перевода двоичного числа в шестнадцатеричное </b> прибегают к следующему простому и наглядному способу. Каждый байт информации разбивают на две части по четыре бита, как показано на приведенном выше скриншоте. Т.о. в каждой половинке байта двоичным кодом можно закодировать только шестнадцать значений (два в четвертой степени), что можно легко представить шестнадцатеричным числом.</p><p>Причем, в левой половине байта считать степени нужно будет опять начиная с нулевой, а не так, как показано на скриншоте. В результате, путем нехитрых вычислений, мы получим, что на скриншоте закодировано число E9. Надеюсь, что ход моих рассуждений и разгадка данного ребуса вам оказались понятны. Ну, а теперь продолжим, собственно, говорить про кодировки текста.</p><h3>Расширенные версии Аски — кодировки CP866 и KOI8-R с псевдографикой</h3><p>Итак, мы с вами начали говорить про ASCII, которая являлась как бы отправной точкой для развития всех современных кодировок (Windows 1251, юникод, UTF 8).</p><p>Изначально в нее было заложено только 128 знаков латинского алфавита, арабских цифр и еще чего-то там, но в расширенной версии появилась возможность использовать все 256 значений, которые можно закодировать в одном байте информации. Т.е. появилась возможность добавить в Аски символы букв своего языка.</p><p>Тут нужно будет еще раз отвлечься, чтобы пояснить — <b>зачем вообще нужны кодировки </b> текстов и почему это так важно. Символы на экране вашего компьютера формируются на основе двух вещей — наборов векторных форм (представлений) всевозможных знаков (они находятся в файлах со ) и кода, который позволяет выдернуть из этого набора векторных форм (файла шрифта) именно тот символ, который нужно будет вставить в нужное место.</p><p>Понятно, что за сами векторные формы отвечают шрифты, а вот за кодирование отвечает операционная система и используемые в ней программы. Т.е. любой текст на вашем компьютере будет представлять собой набор байтов, в каждом из которых закодирован один единственный символ этого самого текста.</p><p>Программа, отображающая этот текст на экране (<a href="/life-hacks-for-different-systems/obzor-besplatnyh-alternativnyh-tekstovyh-redaktorov-luchshie.html">текстовый редактор</a>, браузер и т.п.), при разборе кода считывает кодировку очередного знака и ищет соответствующую ему векторную форму в <a href="/instructions/uvelichenie-faila-podkachki-ili-zachem-nuzhna-virtualnaya-pamyat-optimizaciya.html">нужном файле</a> шрифта, который подключен для отображения данного текстового документа. Все просто и банально.</p><p>Значит, чтобы закодировать любой нужный нам символ (например, из национального алфавита), должно быть выполнено два условия — векторная форма этого знака должна быть в используемом шрифте и этот символ можно было бы закодировать в расширенных кодировках ASCII в один байт. Поэтому таких вариантов существует целая куча. Только лишь для кодирования символов русского языка существует несколько разновидностей расширенной Аски.</p><p>Например, изначально появилась <b>CP866 </b>, в которой была возможность использовать символы русского алфавита и она являлась расширенной версией ASCII.</p><p>Т.е. ее <a href="/life-hacks/ne-rabotaet-verhnyaya-chast-sensora-reshaem-problemy-s-displeem-na-vashem.html">верхняя часть</a> полностью совпадала с базовой версией Аски (128 символов латиницы, цифр и еще всякой лабуды), которая представлена на приведенном чуть выше скриншоте, а вот уже <a href="/instructions/chto-takoe-kod-modeli-telefona-samsung-na-dverce-ili-vnutri.html">нижняя часть</a> таблицы с кодировкой CP866 имела указанный на скриншоте чуть ниже вид и позволяла закодировать еще 128 знаков (русские буквы и всякая там псевдографика):</p><p><img src='https://i2.wp.com/ktonanovenkogo.ru/image/cp866.png' width="100%" loading=lazy></p><p>Видите, в правом столбце цифры начинаются с 8, т.к. числа с 0 до 7 относятся к базовой части ASCII (см. первый скриншот). Т.о. русская буква «М» в CP866 будет иметь код 9С (она находится на пересечении <a href="/reviews/zamena-strok-matricy-sootvetstvuyushchimi-stolbcami-nazyvaetsya-kak-nauchitsya.html">соответствующих строки</a> с 9 и столбца с цифрой С в шестнадцатеричной системе счисления), который можно записать в одном байте информации, и при наличии подходящего шрифта с русскими символами эта буква без проблем отобразится в тексте.</p><p>Откуда взялось такое количество <b>псевдографики в CP866 </b>? Тут все дело в том, что эта кодировка для русского текста разрабатывалась еще в те мохнатые года, когда не было такого распространения графических <a href="/life-hacks-for-ios/vidy-operacionnyh-sistem-tipy-operacionnyh-sistem-ponyatie-operacionnoi.html">операционных систем</a> как сейчас. А в Досе, и подобных ей текстовых операционках, псевдографика позволяла хоть как-то разнообразить оформление текстов и поэтому ею изобилует CP866 и все другие ее ровесницы из разряда расширенных версий Аски.</p><p>CP866 распространяла компания IBM, но кроме этого для символов русского языка были разработаны еще ряд кодировок, например, к этому же типу (расширенных ASCII) можно отнести <b>KOI8-R </b>:</p><p><img src='https://i1.wp.com/ktonanovenkogo.ru/image/koi8-r.png' width="100%" loading=lazy></p><p>Принцип ее работы остался тот же самый, что и у описанной чуть ранее CP866 — каждый символ текста кодируется одним единственным байтом. На скриншоте показана вторая половина таблицы KOI8-R, т.к. первая половина полностью соответствует базовой Аски, которая показана на первом скриншоте в этой статье.</p><p>Среди особенностей кодировки KOI8-R можно отметить то, что русские буквы в ее таблице идут не в <a href="/life-hacks-for-ios/kak-v-eksele-sdelat-po-alfavitnomu-poryadku-svyazannyi-vypadayushchii.html">алфавитном порядке</a>, как это, например, сделали в CP866.</p><p>Если посмотрите на самый первый скриншот (базовой части, которая входит во все расширенные кодировки), то заметите, что в KOI8-R русские буквы расположены в тех же ячейках таблицы, что и созвучные им буквы латинского алфавита из первой части таблицы. Это было сделано для удобства перехода с русских символов на латинские путем отбрасывания всего одного бита (два в седьмой степени или 128).</p><h3>Windows 1251 — современная версия ASCII и почему вылезают кракозябры</h3><p>Дальнейшее развитие кодировок текста было связано с тем, что набирали популярность графические операционные системы и необходимость использования псевдографики в них со временем пропала. В результате возникла целая группа, которая по своей сути по-прежнему являлись расширенными версиями Аски (один символ текста кодируется всего одним байтом информации), но уже без использования символов псевдографики.</p><p>Они относились к так называемым ANSI кодировкам, которые были разработаны американским институтом стандартизации. В просторечии еще использовалось название кириллица для варианта с поддержкой русского языка. Примером такой может служить .</p><p>Она выгодно отличалась от используемых ранее CP866 и KOI8-R тем, что место символов псевдографики в ней заняли недостающие символы русской типографики (окромя знака ударения), а также символы, используемые в близких к русскому славянских языках (украинскому, белорусскому и т.д.):</p><p><img src='https://i2.wp.com/ktonanovenkogo.ru/image/windows-1251.png' width="100%" loading=lazy></p><p>Из-за такого обилия кодировок русского языка, у производителей шрифтов и производителей программного обеспечения постоянно возникала головная боль, а у нас с вам, уважаемые читатели, зачастую вылезали те самые пресловутые <b>кракозябры </b>, когда происходила путаница с используемой в тексте версией.</p><p>Очень часто они вылезали при отправке и получении сообщений по электронной почте, что повлекло за собой создание очень сложных перекодировочных таблиц, которые, собственно, решить эту проблему в корне не смогли, и зачастую пользователи для переписки использовали , чтобы избежать пресловутых кракозябров при использовании русских кодировок подобных CP866, KOI8-R или Windows 1251.</p><p>По сути, кракозябры, вылазящие вместо русского текста, были результатом некорректного использования кодировки данного языка, которая не соответствовала той, в которой было закодировано <a href="/life-hacks-for-smartphones/soobshchenie-uspeshno-dostavleno-short-message-successfully-delivered-obmen.html">текстовое сообщение</a> изначально.</p><p>Допустим, если символы, закодированные с помощью CP866, попробовать отобразить, используя кодовую таблицу Windows 1251, то эти самые кракозябры (бессмысленный набор знаков) и вылезут, полностью заменив собой текст сообщения.</p><p><img src='https://i2.wp.com/ktonanovenkogo.ru/image/krakozyabry-kodirovka.png' height="259" width="325" loading=lazy></p><p>Аналогичная ситуация очень часто возникает при , форумов или блогов, когда текст с русскими символами по ошибке сохраняется не в той кодировке, которая используется на сайте по умолчанию, или же не в том текстовом редакторе, который добавляет в код отсебятину не видимую невооруженным глазом.</p><p>В конце концов такая ситуация с множеством кодировок и постоянно вылезающими кракозябрами многим надоела, появились предпосылки к созданию новой универсальной вариации, которая бы заменила собой все существующие и решила бы, наконец, на корню проблему с появлением не читаемых текстов. Кроме этого существовала проблема языков подобных китайскому, где символов языка было гораздо больше, чем 256.</p><h2>Юникод (Unicode) — универсальные кодировки UTF 8, 16 и 32</h2><p>Эти тысячи знаков языковой группы юго-восточной Азии никак невозможно было описать в одном байте информации, который выделялся для кодирования символов в расширенных версиях ASCII. В результате был создан консорциум под названием <b>Юникод </b> (Unicode — Unicode Consortium) при сотрудничестве многих лидеров IT индустрии (те, кто производит софт, кто кодирует железо, кто создает шрифты), которые были заинтересованы в появлении универсальной кодировки текста.</p><p>Первой вариацией, вышедшей под эгидой консорциума Юникод, была <b>UTF 32 </b>. Цифра в названии кодировки означает количество бит, которое используется для кодирования одного символа. 32 бита составляют 4 байта информации, которые понадобятся для кодирования одного единственного знака в новой универсальной кодировке UTF.</p><p>В результате чего, один и тот же файл с текстом, закодированный в расширенной версии ASCII и в UTF-32, в последнем случае будет иметь размер (весить) в четыре раза больше. Это плохо, но зато теперь у нас появилась возможность закодировать с помощью ЮТФ число знаков, равное двум в тридцать второй степени (<b>миллиарды символов </b>, которые покроют любое реально необходимое значение с колоссальным запасом).</p><p>Но многим странам с языками европейской группы такое <a href="/life-hacks-for-pc/chto-oznachaet-v-facebook-video-live-translyacii-v-socialnoi-seti-facebook.html">огромное количество</a> знаков использовать в кодировке вовсе и не было необходимости, однако при задействовании UTF-32 они ни за что ни про что получали четырехкратное увеличение веса текстовых документов, а в результате и увеличение объема интернет трафика и объема хранимых данных. Это много, и такое расточительство себе никто не мог позволить.</p><p>В результате развития Юникода появилась <b>UTF-16 </b>, которая получилась настолько удачной, что была принята по умолчанию как базовое пространство для всех символов, которые у нас используются. Она использует два байта для кодирования одного знака. Давайте посмотрим, как это дело выглядит.</p><p>В операционной системе Windows вы можете пройти по пути «Пуск» — «Программы» — «Стандартные» — «Служебные» — «Таблица символов». В результате откроется таблица с <a href="/game/detalnyi-gid-po-ispolzovaniyu-microsoft-word-upravlyaem-vektornymi.html">векторными формами</a> всех установленных у вас в системе шрифтов. Если вы выберете в «<a href="/life-hacks-for-different-systems/primenenie-mk-avr-shemy-algoritmy-programmy-gde-i-kak-uchitsya.html">Дополнительных параметрах</a>» набор знаков Юникод, то сможете увидеть для каждого шрифта в отдельности весь ассортимент входящих в него символов.</p><p>Кстати, щелкнув по любому из них, вы сможете увидеть его двухбайтовый <b>код в формате UTF-16 </b>, состоящий из четырех шестнадцатеричных цифр:</p><p><img src='https://i0.wp.com/ktonanovenkogo.ru/image/yunikod.png' height="512" width="451" loading=lazy></p><p>Сколько символов можно закодировать в UTF-16 с помощью 16 бит? 65 536 (два в степени шестнадцать), и именно это число было принято за базовое пространство в Юникоде. Помимо этого существуют способы закодировать с помощью нее и около двух миллионов знаков, но ограничились расширенным пространством в миллион символов текста.</p><p>Но даже эта удачная версия кодировки Юникода не принесла особого удовлетворения тем, кто писал, допустим, программы только на английском языке, ибо у них, после перехода от расширенной версии ASCII к UTF-16, вес документов увеличивался в два раза (один байт на один символ в Аски и два байта на тот же самый символ в ЮТФ-16).</p><p>Вот именно для удовлетворения всех и вся в консорциуме Unicode было решено придумать <b>кодировку переменной длины </b>. Ее назвали UTF-8. Несмотря на восьмерку в названии, она действительно имеет переменную длину, т.е. каждый символ текста может быть закодирован в последовательность длиной от одного до шести байт.</p><p>На практике же в UTF-8 используется только диапазон от одного до четырех байт, потому что за четырьмя байтами кода ничего уже даже теоретически не возможно представить. Все латинские знаки в ней кодируются в один байт, так же как и в старой доброй ASCII.</p><p>Что примечательно, в случае кодирования только латиницы, даже те программы, которые не понимают Юникод, все равно прочитают то, что закодировано в ЮТФ-8. Т.е. базовая часть Аски просто перешла в это детище консорциума Unicode.</p><p>Кириллические же знаки в UTF-8 кодируются в два байта, а, например, грузинские — в три байта. Консорциум Юникод после создания UTF 16 и 8 решил основную проблему — теперь у нас <b>в шрифтах существует единое кодовое пространство </b>. И теперь их производителям остается только исходя из своих сил и возможностей заполнять его векторными формами символов текста. Сейчас в наборы даже .</p><p>В приведенной чуть выше «Таблице символов» видно, что разные шрифты поддерживают разное количество знаков. Некоторые насыщенные символами Юникода шрифты могут весить очень прилично. Но зато теперь они отличаются не тем, что они созданы для разных кодировок, а тем, что производитель шрифта заполнил или не заполнил единое кодовое пространство теми или иными векторными формами до конца.</p><h2>Кракозябры вместо русских букв — как исправить</h2><p>Давайте теперь посмотрим, как появляются вместо текста кракозябры или, другими словами, как выбирается правильная кодировка для русского текста. Собственно, она задается в той программе, в которой вы создаете или редактируете этот самый текст, или же код с использованием текстовых фрагментов.</p><p>Для редактирования и создания <a href="/life-hacks-in-vk/programmirovanie-rabota-s-tekstovymi-failami-rabota-s-failami-v-yazyke.html">текстовых файлов</a> лично я использую очень хороший, на мой взгляд, . Впрочем, он может подсвечивать синтаксис еще доброй сотни языков программирования и разметки, а также имеет возможность расширения с помощью плагинов. Читайте <a href="/computers/glavnye-preimushchestva-veon-media-kontent-video-podrobnyi.html">подробный обзор</a> этой замечательной программы по приведенной ссылке.</p><p>В <a href="/life-hacks-for-ios/youtube-odnoklassniki-vhod-odnoklassniki-vhod-voiti-na-svoyu-stranicu-verhnyaya.html">верхнем меню</a> Notepad++ есть пункт «Кодировки», где у вас будет возможность преобразовать уже имеющийся вариант в тот, который используется на вашем сайте по умолчанию:</p><p><img src='https://i1.wp.com/ktonanovenkogo.ru/image/kodirovka-utf-8.png' width="100%" loading=lazy></p><p>В случае сайта на Joomla 1.5 и выше, а также в случае блога на WordPress следует во избежании появления кракозябров выбирать вариант <b>UTF 8 без BOM </b>. А что такое приставка BOM?</p><p>Дело в том, что когда разрабатывали кодировку ЮТФ-16, зачем-то решили прикрутить к ней такую вещь, как возможность записывать код символа, как в прямой последовательности (например, 0A15), так и в обратной (150A). А для того, чтобы программы понимали, в какой именно последовательности читать коды, и был придуман <b>BOM </b> (Byte Order Mark или, другими словами, сигнатура), которая выражалась в добавлении трех дополнительных байтов в самое начало документов.</p><p>В кодировке UTF-8 никаких BOM предусмотрено в консорциуме Юникод не было и поэтому добавление сигнатуры (этих самых пресловутых дополнительных трех байтов в начало документа) некоторым программам просто-напросто мешает читать код. Поэтому мы всегда при сохранении файлов в ЮТФ должны выбирать вариант без BOM (без сигнатуры). Таким образом, вы заранее <b>обезопасите себя от вылезания кракозябров </b>.</p><p>Что примечательно, некоторые программы в Windows не умеют этого делать (не умеют сохранять текст в ЮТФ-8 без BOM), например, все тот же пресловутый Блокнот Windows. Он сохраняет документ в UTF-8, но все равно добавляет в его начало сигнатуру (три дополнительных байта). Причем эти байты будут всегда одни и те же — читать код в прямой последовательности. Но на серверах из-за этой мелочи может возникнуть проблема — вылезут кракозябры.</p><p>Поэтому ни в коем случае <b>не пользуйтесь обычным блокнотом Windows </b> для редактирования документов вашего сайта, если не хотите появления кракозябров. Лучшим и наиболее <a href="/life-hacks-for-ios/igry-ot-nechego-delat-onlain-varianty-dlya-kompanii-prostye-metody-borby.html">простым вариантом</a> я считаю уже упомянутый <a href="/game/kak-sozdat-svoi-bloknot-v-kompyutere-tekstovyi-redaktor.html">редактор Notepad</a>++, который практически не имеет недостатков и состоит из одних лишь достоинств.</p><p>В Notepad ++ при выборе кодировки у вас будет возможность преобразовать текст в кодировку UCS-2, которая по своей сути очень близка к стандарту Юникод. Также в Нотепаде можно будет закодировать текст в ANSI, т.е. применительно к русскому языку это будет уже описанная нами чуть выше Windows 1251. Откуда берется эта информация?</p><p>Она прописана в реестре вашей операционной <a href="/life-hacks-for-different-systems/kak-otkat-sistemy-windows-7-kak-vosstanovit-sistemu-windows-xp-gde-nahodyatsya-tochki.html">системы Windows</a> — какую кодировку выбирать в случае ANSI, какую выбирать в случае OEM (для русского языка это будет CP866). Если вы установите на своем компьютере другой язык по умолчанию, то и эти кодировки будут заменены на аналогичные из разряда ANSI или OEM для того самого языка.</p><p>После того, как вы в Notepad++ сохраните документ в нужной вам кодировке или же откроете документ с сайта для редактирования, то в правом нижнем углу редактора сможете увидеть ее название:</p><p><b>Чтобы избежать кракозябров </b>, кроме описанных выше действий, будет полезным прописать в его шапке исходного кода всех страниц сайта информацию об этой самой кодировке, чтобы на сервере или <a href="/life-hacks-for-different-systems/chto-takoe-host-mashina-host-chto-takoe-host-i-chem-on-otlichaetsya-ot-hosts-i.html">локальном хосте</a> не возникло путаницы.</p><p>Вообще, во всех языках гипертекстовой разметки кроме Html используется специальное объявление xml, в котором указывается кодировка текста.</p><p> <?xml version="1.0" encoding="windows-1251"?> </p><p>Прежде, чем начать разбирать код, браузер узнает, какая версия используется и как именно нужно интерпретировать коды символов этого языка. Но что примечательно, в случае, если вы сохраняете документ в принятом по умолчанию юникоде, то это объявление xml можно будет опустить (кодировка будет считаться UTF-8, если нет BOM или ЮТФ-16, если BOM есть).</p><p>В случае же документа языка Html для указания кодировки используется <b>элемент Meta </b>, который прописывается между открывающим и закрывающим тегом Head:</p><p> <head> ... <meta charset="utf-8"> ... </head> </p><p>Эта запись довольно сильно отличается от принятой в , но полностью соответствует новому внедряемому потихоньку стандарту Html 5, и она будет стопроцентно правильно понята любыми используемыми на текущий момент браузерами.</p><p>По идее, элемент Meta с указание кодировки Html документа лучше будет ставить <b>как можно выше в шапке документа </b>, чтобы на момент встречи в тексте первого знака не из базовой ANSI (которые правильно прочитаются всегда и в любой вариации) браузер уже должен иметь информацию о том, как интерпретировать коды этих символов.</p> <p>Удачи вам! До скорых встреч на страницах блога сайт</p><blockquote>посмотреть еще ролики можно перейдя на </blockquote>");"><br><img src='https://i0.wp.com/ktonanovenkogo.ru/wp-content/uploads/video/image/do-i-posle-spetcefekta.jpg' width="100%" loading=lazy><p>Вам может быть интересно</p><p><img src='https://i2.wp.com/ktonanovenkogo.ru/wp-content/uploads/2013/10/url.jpg' width="100%" loading=lazy><span>Что такое URL адреса, чем отличаются абсолютные и <a href="/life-hacks-for-ios/otnositelnyi-put-k-failu-html-absolyutnye-i-otnositelnye-ssylki.html">относительные ссылки</a> для сайта </span> <br><img src='https://i2.wp.com/ktonanovenkogo.ru/wp-content/uploads/2014/05/openserver.jpg' width="100%" loading=lazy><span>OpenServer - современный <a href="/life-hacks-for-windows/xampp-gotovyi-komplekt-web-servera-ustanovka-lokalnogo-servera-xampp-i-wordpress.html">локальный сервер</a> и пример его использования для <a href="/life-hacks-for-windows/ustanovka-wordpress-na-lokalnyi-kompyuter-s-pomoshchyu-xampp-ustanovka-wordpress-kak.html">установки WordPress</a> на компьютер </span> <br><img src='https://i1.wp.com/ktonanovenkogo.ru/wp-content/uploads/2013/10/chmod.jpg' width="100%" loading=lazy><span>Что такое Chmod, какие права доступа назначать файлам и папкам (777, 755, 666) и как это сделать через PHP </span> <br><img src='https://i1.wp.com/ktonanovenkogo.ru/wp-content/uploads/2013/10/poisk-na-saite.jpg' width="100%" loading=lazy><span>Поиск Яндекса по сайту и интернет-магазину </p> <p><b>Актуальность. </b>Внедрение <a href="/internet/chto-otnositsya-k-informacionnym-i-kommunikacionnym-tehnologiyam.html">информационных технологий</a> отразилось на технологии документооборота внутри организаций и между ними, и между отдельными пользователями. Большое значение в данной сфере приобретает электронный документооборот, позволяющий отказаться от бумажных носителей (снизить их долю в общем потоке) и осуществлять обмен документами между субъектами в <a href="/life-hacks-for-windows/kak-pridat-elektronnoi-perepiske-yuridicheskuyu-silu-v-kakom-vide-sud-primet.html">электронном виде</a>. Преимущества данного подхода очевидны: снижение затрат на обработку и хранение документов и их <a href="/life-hacks-for-different-systems/yandeks-pipl-samyi-bystryi-poisk-lyudei-srazu-po-vsem-socsetyam.html">быстрый поиск</a>. Однако отказ от бумажного документооборота поставил ряд проблем, связанных с обеспечением целостности <a href="/instructions/yuridicheskaya-sila-dokumentov-peredavaemyh-po-faksu-i.html">передаваемого документа</a> и аутентификации подлинности его автора.</p> <p><b>Цель работы. </b>Дать основные понятия по теме «Кодирование <a href="/life-hacks-for-different-systems/sovremennye-tehnologii-i-sredstva-obrabotki-tekstovoi-informacii.html">текстовой информации</a>», отразить возможности злоумышленника при реализации угроз, направленных на нарушение целостности передаваемых сообщений, предложить пути решения проблемы.</p> <p>Что такое код? <b>Код </b> – это система условных знаков для представления информации.</p> <p><b>Кодирование </b> – это представление информации в удобном альтернативном виде с помощью некоторого кода для передачи, обработки или хранения, а <b>декодирование </b> – это процесс восстановления первоначальной формы представления информации.</p> <p>Персональный компьютер обрабатывает числовую, текстовую, графическую, звуковую и видео – информацию. В компьютере она представлена в двоичном коде, так если используется алфавит в два символа – 0 и 1. В двоичном коде ее легче всего представить как электрический импульс, его отсутствие (0) и присутствие (1). Подобный вид кодирования называется двоичным.</p> <p><b>Элементы кодируемой информации </b>:</p> <p>Буквы, слова и фразы естественного языка;</p> <p>Знаки препинания, арифметические и логические операции, и т.д;</p> <p>Наследственная информация и т.д.</p> <p>Сами знаки операций и операторы сравнения – это <b>кодовые обозначения </b>, представляющие собой буквы и сочетания букв, числа, графические обозначения, электромагнитные импульсы, световые и <a href="/life-hacks-for-windows/3-zvukovyh-signala-bios-signaly-award-bios-raznovidnosti-zvukovyh.html">звуковые сигналы</a> и т.д.</p> <p><b>Способы кодирования: </b><i>числовой </i> (с помощью чисел), <i>символьный </i> (с помощью символов алфавита исходного текста) и <i>графический </i> (с помощью рисунков, значков)</p> <p><b>Цели кодирования: </b></p> <p>А) Удобство хранения, обработки, передачи информации и обмена ей между субъектами;</p> <p>Б) Наглядность отображения;</p> <p>В) Идентификация объектов и субъектов;</p> <p>Г) Сокрытие секретной информации.</p> <p>Различают <b>одноуровневое </b> и <b>многоуровневое </b>кодирование информации. Одноуровневое кодирование–это световые сигналы светофора. Многоуровневое- представление визуального (графического) образа в виде файла фотографии. Bначале визуальная картинка разбивается на пиксели, каждая отдельная часть картинки кодируется элементарным элементом, а элемент, в свою очередь, кодируется в виде набора цветов (RGB: англ.red – красный, green – зеленый, blue – синий) соответствующей интенсивностью, которая представляется в виде <a href="/life-hacks-for-different-systems/vychisleniya-znacheniya-vyrazheniya-kak-naiti-znachenie-chislovogo.html">числового значения</a> (наборы этих чисел кодируются в <a href="/ios/konvertirovanie-pdf-v-jpeg-kak-perevesti-pdf-v-jpeg-format-kak.html">форматах jpeg</a>, png и т.д.). Наконец, итоговые числа кодируются в виде электромагнитных сигналов для передачи по каналам связи или областей. Сами числа при программной обработке представляются в соответствии с <a href="/computers/ponyatie-edinoi-informacionnoi-sistemy-lanit-prinyal.html">принятой системой</a> кодирования чисел.</p> <p>Различают <b>обратимое </b> и <b>необратимое </b>кодирование. При обратимом можно однозначно восстановить сообщение без потери качества, например, кодирование с помощью азбуки Морзе. При необратимом однозначное восстановление исходного образа невозможно. Например, кодирование аудиовизуальной информации (форматы jpg, mp3 или avi) или хеширование.</p> <p>Существуют <b>общедоступные </b> и <b>секретные </b> системы кодирования. Первые используются для облегчения обмена информацией, вторые – в целях ее сокрытия от посторонних лиц.</p> <p><b>Кодирование текстовой информации </b><b>. </b>Пользователь обрабатывает текст, состоящий из букв, цифр, знаков препинания и других элементов.</p> <p>Для кодирования одного символа необходим <b>1 байт </b> памяти или 8 бит. Cпомощью простой формулы, связывающей количество возможных событий (К) и количество информации (I), вычисляем, сколько не одинаковых символов можно закодировать: <b>К = 2^I = 28 = 256 </b>. Для кодирования текстовой информации используют алфавит мощностью в 256 символов.</p> <p>Принцип <a href="/life-hacks-for-ios/vidy-i-sposoby-kodirovanie-dannyh-metody-kodirovaniya-cifrovyh-signalov.html">данного кодирования</a> заключается в том, что каждому символу (букве, знаку) соответствует свой двоичный код от 00000000 до 11111111.</p> <p>Для кодирования букв российского алфавита есть пять разных кодировочных таблиц (КОИ – 8, СР1251, СР866, Мас, ISO). Тексты, закодированные одной таблицей, не будут корректно отображаться в другой кодировке:</p> <p><b>Для одного двоичного кода в разных таблицах соответствуют разные символы: </b></p> <p>Таблица 1 – Соответствие <a href="/life-hacks-for-different-systems/smailiki-raznogo-nastroeniya-smaily-iz-simvolov-znachenie-smailika.html">разных символов</a> двоичному коду</p> <table border="1" cellspacing="0" cellpadding="0"><tbody><tr><td valign="top" width="91">Двоичный код </td> <td valign="top" width="91">Десятичный код </td> <td valign="top" width="91">КОИ8 </td> <td valign="top" width="91">СР1251 </td> <td valign="top" width="91">СР866 </td> <td valign="top" width="91">Мас </td> <td valign="top" width="91">ISO </td> </tr><tr><td valign="top" width="91">11000010 </td> <td valign="top" width="91">194 </td> <td valign="top" width="91">Б </td> <td valign="top" width="91">В </td> <td valign="top" width="91">- </td> <td valign="top" width="91">- </td> <td valign="top" width="91">Т </td> </tr></tbody></table><p>Перекодированием текстовых документов занимаются программы, встроенные в текстовые редакторы и процессоры. С начала 1997 года <a href="/life-hacks-wi-fi/dopolnitelnye-komponenty-ms-office-harakteristika-osnovnyh-komponentov-microsoft.html">Microsoft Office</a> поддерживает новую кодировку Unicode, в ней можно закодировать не 256, а 655369 символов (под каждый символ начали отводить 2 байта).</p> <p><b>Биты и байты. </b>Цифра, воспринимаемая машиной, таит в себе некоторое количество информации. Оно равно одному биту. Это касается каждой единицы и каждого нуля, которые составляют ту или иную последовательность зашифрованной информации. Соответственно, количество информации в любом случае можно определить, просто зная количество символов в последовательности двоичного кода. Они будут численно равны между собой. 2 цифры в коде несут в себе информацию объемом в 2 бита, 10 цифр – 10 бит и так далее. Принцип определения информационного объема:</p> <p>Рисунок 1 – определение информационного объема</p> <p><b>Проблема целостности информации. </b>Проблема целостности информации с момента ее появления до современности прошла довольно долгий путь. Изначально существовало два способа решения задачи: использование <a href="/computers/bezopasnost-ip-telefonii-metody-kriptograficheskoi-zashchity.html">криптографических методов</a> защиты информации и хранения данных и программно-техническое разграничение доступа к данным и ресурсам вычислительных систем. Стоит учесть, что в начале 80–х годов компьютерные системы были слабо распространены, технологии глобальных и локальных вычислительных сетей находились на <a href="/computers/skolko-ustanavlivaetsya-windows-7-s-fleshki-predvaritelnaya.html">начальной стадии</a> своего развития, и указанные задачи удавалось достаточно успешно решать.</p> <p>Современные методы обработки, передачи и накопления <a href="/instructions/chem-zaklyuchaetsya-informacionnaya-bezopasnost-informacionnaya.html">информационной безопасности</a> способствовали появлению угроз, связанных с возможностью потери, искажения и раскрытия данных, адресованных или принадлежащих другим пользователям. Поэтому обеспечение целостности информации является одним из ведущих направлений развития ИТ .</p> <p>Под информационной безопасностью понимают защищенность информации от незаконного ее потребления: ознакомления, преобразования и уничтожения.</p> <p>Различают <b><i>естественные </i> </b><i>(не зависящие от деятельности человека) </i>и<b><i> искусственные </i> </b><i>(вызванные человеческой деятельностью) </i>угрозы информационной безопасности. В зависимости от их мотивов искусственные подразделяют на непреднамеренные (случайные) и преднамеренные (умышленные).</p> <p>Гарантия того, что сообщение не было изменено в процессе его передачи, необходима и для отправителя, и для получателя <a href="/iron/kak-vozobnovit-perepisku-v-kontakte-kak-vosstanavlivat-i-chitat-udalennye.html">электронного сообщения</a>. Получатель должен иметь возможность распознать факт искажений, внесенных в документ.</p> <p>Проблема аутентификации подлинности автора сообщения заключается в обеспечении гарантии того, что никакой субъект не сможет подписаться ни чьим другим именем, кроме своего. В обычном бумажном документообороте информация в документе и рукописная подпись автора жестко связана с физическим носителем (бумагой). Для электронного же документооборота жесткая связь информации с физическим носителем отсутствует.</p> <p>Рассмотрим методы взлома компьютерных систем, все попытки подразделяют на 3 группы:<br> 1. Атаки на уровне операционной системы: кража пароля, сканирование жестких дисков компьютера, сборка “мусора” (получение доступа к удаленным объектам в “мусорной” корзине), запуск программы от имени пользователя, модификация кода или данных подсистем и т.д.<br> 2. Атака на уровне систем управления базами данных: 2 сценария, в первом случае результаты <a href="/life-hacks-for-different-systems/arifmeticheskie-operacii-operatory-otnosheniya-i-logicheskie-operatory.html">арифметических операций</a> над числовыми полями СУБД округляются в меньшую сторону, а разница суммируется в другой записи СУБД, во втором случае хакер получает доступ к статистическим данным<br> 3. Атаки на уровне сетевого программного обеспечения. Сетевое программное обеспечение (СПО) наиболее уязвимо: перехват сообщений на маршрутизаторе, создание ложного маршрутизатора, навязывание сообщений, отказ в обслуживании</p> <p>Перечислим возможности злоумышленника при реализации угроз, направленных на нарушение целостности передаваемых сообщений и подлинности их авторства: </p> <p><b>А) Активный перехват. Нарушитель перехватывает <a href="/life-hacks-for-smartphones/kak-prikrepit-dokument-k-soobshcheniyu-v-kontakte-kak-peredavat-lyubye-faily.html">передаваемые сообщения</a>, изменяя их. </b></p> <p><b>Б) Маскарад. Нарушитель посылает документ абоненту B, подписываясь именем абонента A. </b></p> <p><b>В) </b> <b>Ренегатство. </b> Абонент А заявляет, что не посылал сообщения абоненту B, хотя на самом деле посылал. В этом случае абонент А – злоумышленник. </p> <p><b>Г) </b> Подмена. Абонент B изменяет/формирует <a href="/life-hacks-for-ios/vord-zakryvaetsya-sam-po-sebe-zakrytie-dokumenta-i-vyhod-iz-word-sozdanie-novogo.html">новый документ</a>, заявляя, что получил его от абонента A. Недобросовестный пользователь – получатель сообщения B. </p> <p>Для анализа целостности информации используется подход, основанный на вычислении контрольной суммы переданного сообщения и функции хэширования (алгоритма, позволяющего сообщение любой длины представить в виде короткого значения фиксированной длины).</p> <p><b><i>H </i> </b><b><i>а всех этапах жизненного цикла существует угроза ЦИ (целостности информации): </i> </b></p> <p>При <b>обработке информации </b> нарушение ЦИ возникает вследствие технических неисправностей, алгоритмических и программных ошибок, ошибок и деструктивных действий обслуживающего персонала, внешнего вмешательства, действия разрушающих и вредоносных программ (вирусов, червей).</p> <p>В процессе <b>передачи </b> информации – различного рода помехи как естественного, так и искусственного происхождения. Возможно искажение, уничтожение и перехват информации.</p> <p>В процессе <b>хранения </b> основная угроза – <a href="/life-hacks/zashchita-dannyh-ot-nesankcionirovannogo-dostupa-zashchity-ot-nesankcionirovannogo.html">несанкционированный доступ</a> с целью модификации информации, вредоносные программы (вирусы, черви, логические бомбы) и технические неисправности.</p> <p>В процессе <b>старения </b> – утеря технологий, способных воспроизвести информацию, и физическое старение носителей информации.</p> <p>Угрозы ЦИ возникают на протяжении всего жизненного цикла информации с момента ее появления до начала утилизации.</p> <p>Мероприятия по предотвращению утечки информации по <a href="/game/zashchita-informacii-ot-utechki-po-tehnicheskim-kanalam-priznakov-togo-chto-vam.html">техническим каналам</a> включают в себя обследования помещений на предмет обнаружения подслушивающих устройств, а также оценку защищенности помещений от возможной утечки информации с использованием дистанционных методов перехвата и исследование ТС, где ведутся конфиденциальные разговоры.</p> <p><b>Обеспечение целостности информации. </b>Для обеспечения ЦИ <a href="/ios/chto-mozhno-podklyuchit-k-smartfonu-cherez-usb-kak-podklyuchit-s-pomoshchyu.html">необходимым условием</a> является наличие высоконадежных технических средств (ТС), включающие в себя аппаратную и/или программную составляющие, и различные программные методы, значительно расширяющие возможности по обеспечению безопасности хранящейся информации . ТС обеспечивает высокую отказоустойчивость и защиту информации от <a href="/life-hacks-for-smartphones/chto-yavlyaetsya-ugrozoi-informacionnoi-bezopasnosti-informacionnaya.html">возможных угроз</a>. K ним относят средства защиты от электромагнитного импульса (ЭМИ). Наиболее эффективный метод уменьшения интенсивности ЭМИ – это <b>экранирование </b>– размещение оборудования в электропроводящем корпусе, который препятствует проникновению электромагнитного поля. </p> <p>К организационным методам относят <b>разграничение доступа </b>, организующий доступ к информации к используемому оборудованию и предполагающий достаточно большой перечень мероприятий, начиная от подбора сотрудников и заканчивая работой с техникой и документами. Среди них выделяют технологии защиты,обработки и хранения документов, аттестацию помещений и рабочих зон, порядок защиты информации от случайных/несанкционированных действий. Особое внимания уделяют защите операционных систем (ОС), обеспечивающих функционирование практически всех составляющих системы. Наиболее действенный механизм разграничения доступа для ОС – изолированная <a href="/life-hacks-wi-fi/programma-dlya-sozdaniya-programmnogo-obespecheniya-vybiraem-sredu-programmirovaniya.html">программная среда</a> (ИПС). Устойчивость ИКС к различным разрушающим и вредоносным программам повышает ИПС, обеспечивая целостность информации.</p> <p><b>Антивирусная защита </b>. В настоящее время под <a href="/iron/s-chelovechestvom-otkuda-vzyalsya-virus-kogda-poyavilsya-pervyi.html">компьютерным вирусом</a> принято понимать программный код, обладающий способностью создавать собственные копии и имеющие механизмы, внедряющие эти копии в исполняемые объекты вычислительной системы . Вредоносные программы (вирусы) имеют множество видов и типов, отличаясь между собой лишь способами воздействия на <a href="/game/bolshie-faily-na-fleshku-kak-skinut-bolshoi-fail-na-fleshku-vidy.html">различные файлы</a>, размещением в памяти ЭВМ или программах, объектами воздействия. Главное свойство вирусов, выделяющее их среди множества программ и делающее наиболее опасным, это способность к размножению.</p> <p>ЦИ обеспечивает использование антивирусных программ, однако ни одна из них не гарантирует обнаружение неизвестного вируса. Применяемые эвристические сканеры не всегда дают правильный диагноз. Пример подобных ошибок – две антивирусные программы, запущенные на одном компьютере: файлы одного антивируса принимаются за вредоносную программу другим антивирусом.</p> <p>Использование локальных сетей, не имеющих связи с интернетом – лучший способ защиты от вирусов. При этом необходимо жестко контролировать различные носители информации с <a href="/life-hacks-wi-fi/chto-takoe-prikladnye-programmy-dlya-kompyutera-obrazovatelnoe.html">прикладными программами</a>, с помощью которых можно занести вирус .</p> <p><b>Помехоустойчивое кодирование </b>. Наиболее уязвимой информация бывает в процессе ее передачи. Разграничение доступа снимает многие угрозы, но она невозможна при использовании в канале</p> <p>связи беспроводных линий. Информация наиболее уязвима именно на таких участках ИКС. Обеспечение ЦИ достигается засчет уменьшения объема передаваемой информации. Это уменьшение можно достичь за счет оптимального кодирования источника.</p> <p><b>Метод динамического сжатия </b>. При таком подходе структура сжатого сообщения включает в себя словарь и сжатую информацию. Однако, если в словаре при передаче или хранении есть ошибка, то возникает эффект размножения ошибок, приводящий к информационному искажению/уничтожению.</p> <p><b>Стеганография. </b> С этим термином знаком тот,кто занимается криптографией. Выделяют три направления стеганографии: сокрытие данных, цифровые водяные знаки и заголовки. При скрытой передаче информации одновременно с обеспечением конфиденциальности решается и вопрос обеспечения ЦИ. Нельзя изменить того, чего не видишь – главный аргумент использования стеганографии. Ее <a href="/computers/obzor-lenovo-p2-neveroyatnaya-avtonomnost-glavnye-nedostatki-lenovo-p2.html">главный недостаток</a> – больший объем контейнера. Но это можно нивелировать, передавая в качестве контейнера <a href="/life-hacks-for-windows/chto-vhodit-v-ofisnoe-oborudovanie-smotret-chto-takoe-ofisnoe-oborudovanie-v-drugih-slovaryah-rabo.html">полезную информацию</a>, не критичную к ЦИ.</p> <p><b>Резервирование </b>используется при передаче и хранении информации. При передаче возможен многократный повтор сообщения в одно направление либо его рассылка во все возможные направления. Данный подход можно рассматривать как один из методов ПКИ. При хранении идея резервирования достаточно проста – создание копий полученных файлов и их хранение отдельно от первоначальных документов. Зачастую такие хранилища создаются в географически разнесенных местах.</p> <p>Недостаток резервирования – возможность ее несанкционированного снятия, т.к. информация, располагаемая на <a href="/instructions/vneshnyaya-pamyat-ustroistva-vneshnei-pamyati---apparatnoe.html">внешних устройствах</a> хранения, является незащищенной.</p> <p><b>Заключение </b>. Любая информация, выводящаяся на монитор компьютера, прежде чем там появиться, подвергается кодированию, которое заключается в переводе информации на машинный язык. Он представляет собой последовательность электрических импульсов – нулей и единиц. Для кодирования различных символов существуют отдельные таблицы.</p> <li>Андрианов, В.И. «<a href="/program/shpionskaya-amuniciya-shpionskie-shtuchki-svoimi-rukami-eto.html">Шпионские штучки</a>» и устройства для защиты объектов и информации: справ. пособие / В.И. Андрианов, В.А. Бородин, А.В. Соколов. С- Пб.: Лань, 1996. – 272с.</li> <li>Баранов, А.П. Проблемы обеспечения информационной безопасности в информационно-телекоммуникационной систем <a href="/computers/kompyuternoe-prilozhenie-po-specialnogo-naznacheniya.html">специального назначения</a> и пути их решения // <a href="/life-hacks-wi-fi/prezentaciya-na-temu-rol-informacionnoi-deyatelnosti-v-sovremennom-obshchestve-lekciya-rol-informaci.html">Информационное общество</a>. - 1997. вып.1. - с. 13-17.</li> Количество просмотров публикации: <b>Please wait </b> <p>Если последовательность бит не выглядит разумной(с точки зрения человека), то это случай, когда документ скорее всего был неверно сконвертирован в определенный момент. К примеру мы берем текст ÉGÉìÉRÅ[ÉfÉBÉìÉOÇÕìÔǵÇ≠ǻǢ, и, не придумав ничего лучше, сохраняем его в UTF-8. Текстовый редактор предположил, что он правильно прочитал текст с кодировкой Mac Roman и теперь его надо сохранить в другой кодировке. В конце концов, все эти символы валидны в Unicode. В смысле, в Unicode есть пункт для É, для G, и так далее. Так что мы просто сохраняем его в UTF-8: </p><blockquote>11000011 10001001 01000111 11000011 10001001 11000011 10101100 11000011 10001001 01010010 11000011 10000101 01011011 11000011 10001001 01100110 11000011 10001001 01000010 11000011 10001001 11000011 10101100 11000011 10001001 01001111 11000011 10000111 11000011 10010101 11000011 10101100 11000011 10010100 11000011 10000111 11000010 10110101 11000011 10000111 11100010 10001001 10100000 11000011 10000111 11000010 10111011 11000011 10000111 11000010 10100010 <br></blockquote><br><p>Вот так теперь текст ÉGÉìÉRÅ[ÉfÉBÉìÉOÇÕìÔǵÇ≠ǻǢ представляется последовательностью бит UTF-8. Эта битовая последовательность совершенно оторвана от того, что было в изначальном документе. В какой бы кодировке мы не открывали эту последовательность, нам ни за что не видать исходный текст エンコーディングは難しくない. Он просто потерян. Его можно было бы восстановить, знай мы изначальную кодировку Shift-JIS и то, что мы расценили текст как Mac Roman, а затем сохранили его в UTF-8. Но такие чудеса редко встречаются. </p><p>Множество раз конкретная битовая последовательность оказывается неверной в конкретной кодировке. Если бы мы попытались открыть изначальный документ в ASCII, то увидели бы, что часть символов распозналась, а часть – нет. Программа, который вы пользуетесь, могла бы решить просто выбросить байты, которые не подходят под текущую кодировку, или заменить их на знаки вопроса. Или на <a href="/life-hacks/melkie-simvoly-specialnye-simvoly-dlya-nika-zv-zdochki.html">специальный символ</a> замены в Unicode: � (U+ FFFD). Если после процедуры изъятия неподходящих символов вы сохраните документ, то потеряете их навсегда. </p><p>Если вы неверно угадали кодировку, а потом сохранили ее еще в одну, то вы испортите документ. Можно пытаться исправить его, но эти попытки обычно успехом не оканчиваются. Магия с битовым сдвигом обычно остается неработающей магией: как мертвому припарки. </p><h5>И как же правильно менять кодировки?</h5><p>Это правда просто! Нужно знать кодировку конкретного кусочка текста(битовой последовательности) и применить ее для расшифровки. Это все, что нужно сделать. Если вы пишете программу, которая принимает от пользователя текст, определите в какой кодировке она будет это делать. Любое текстовое поле должно знать, в какой кодировке оно принимает данные. Для любого типа файла, который пользователь может загрузить в программу должна быть определена кодировка. Или должен существовать способ спросить об этом пользователя. Информацию может предоставлять формат файла или пользователь(большинство из них вряд ли знают, пока конечно не дочитают статью). </p><p>Если нужно перегнать текст из одной кодировки в другую, применяйте специальные инструменты. Конвертация – утомительный труд по сравнению двух кодовых страниц и решению, что символ 152 в кодировке А совпадает с символом 4122 в кодировке B с последующим изменением битов. Не нужно изобретать этот велосипед: в каждом распространенном языке программирования есть абстрактные от битов и кодовых страниц инструменты для конвертации текста из кодировки в кодировку.</p><p>Скажем, ваше приложение должно принимать файлы в GB18030, но внутри вы работает в UTF-32. Инструмент iconv может в одну строку сделать конвертацию: iconv("GB18030", "UTF-32", $string). Символы останутся неизменным, несмотря на то, что битовое представление измененилось.</p><blockquote>character GB18030 encoding UTF-32 encoding<br> 縧 10111111 01101100 00000000 00000000 01111110 00100111 </blockquote><p>Вот и все. Содержание строки в его человеческом понимании не изменилось, но теперь это правильная строка в UTF-32. Если вы продолжите работать с ней в UTF-32, у вас не будет никаких проблем с нечитаемыми символами. Однако, как мы обсуждали ранее, не все кодировки способны отображать все символы. Невозможно закодировать символ 縧 в любой из кодировок для европейских языков. И может случится нечто ужасное.</p><h5>Все в Unicode</h5><p>Именно поэтому не существует оправдания в 21 веке не использовать Unicode. Некоторые специализированные кодировки для европейских языков могут более производительны, чем Unicode для конкретных языков. Но пока вам не приходится работать с терабайтами специального текста(а это ОЧЕНЬ много), вам не о чем беспокоиться. Проблемы, вытекающие из-за несовместимости кодировок, гораздо страшнее, чем потерянный гигабайт. И этот аргумент станет только весомей с ростом и удешевлением хранения данных и ширины канала. </p><p>Если системе нужно работать с иными кодировками, сконвертируйте текст в Unicode прежде всего, и перегоните обратно, если его нужно куда-нибудь вывести. Иначе придется очень внимательно следить за каждым случаем обращения к данным и проводить необходимые конвертации, если это возможно без потери информации.</p><h5>Счастливые случайности</h5><blockquote><i>У меня был сайт подключенный к БД. Мое приложение обрабатывала все как UTF-8 и в БД хранила его так, и все было супер, но когда я зашел в админку БД, я ничего не мог понять. </i><br> - анонимный быдлокодер </blockquote><p>Возникают ситуации, когда кодировки обрабатываются неверно, но все по прежнему работает нормально. Часто бывает, что кодировка базы данных выставлена в latin-1, а приложение работает с UTF-8(или любой другой). Вобщем-то, любая комбинация 1 и 0 допустима в однобайтной latin-1. Если база данных получает от приложения данные вида 11100111 10111000 10100111, то оно с радостью сохраняет их, думая, что приложение имело ввиду 縧. Почему бы и нет? Позже бд возвращает те же самые биты приложению, которое счастливо, ведь получило символ UTF-8 縧, который и задумывался. Но интерфейс администрирования бд знает, что используется latin-1, и вот результат: ничего не возможно понять. <br> Глупец просто выиграл лотерею, хотя звезды были не на его стороне. Любая операция над текстом в бд может сработать, но может и выполниться не как задумано, так как бд неправильно воспринимает текст. В худшем случае, бд ненароком уничтожит весь текст, выполняя произвольную операцию 2 года спустя после установки из-за неверной кодировки(и конечно, никакого тебе бэкапа).</p><h5>UTF-8 и ASCII</h5><p>Гениальность UTF-8 в бинарной совместимости с ASCII, которая является де-факто основой для всех кодировок. Все символы ASCII занимают максимум байт в UTF-8 и используют те же биты, что и в ASCII. Иными словами, ASCII может быть отражено 1:1 в UTF-8. Любой символ не из ASCII занимает 2 или более байт в UTF-8. Большинство языков программирования, использующих ASCII в качестве кодировки исходного кода, позволяет включать текст в UTF-8 прямо в текст:</p><p>Сохранение в UTF-8 даст последовательность:</p><blockquote>00100100 01110011 01110100 01110010 01101001 01101110 01100111 00100000<br> 00111101 00100000 00100010 11100110 10111100 10100010 11100101 10101101<br> 10010111 00100010 00111011 </blockquote><p>Только 12 байт из 17(те, что начинаются с 1) являются символами UTF-8(2 символа по 3 байта). Прочие символы находятся в ASCII. Парсер прочитает следующее:</p><blockquote>$string = «11100110 10111100 10100010 11100101 10101101 10010111»; </blockquote><p>Парсер воспринимает все за кавычкой как последовательность бит, которую нужно трактовать как есть, все, вплоть до другой кавычки. Если вы просто выведете эту последовательность, вы выведете текст в UTF-8. Не нужно делать ничего больше. Парсеру не нужно специально поддерживать utf-8, нужно просто воспринимать строки буквально. Простые парсеры могут поддерживать Unicode именно так, на самом деле не поддерживая Unicode. Однако многие языки программирования явно поддерживают Unicode. </p><h5>Кодировки и PHP.</h5><p>PHP не поддерживает Unicode. Правда, он поддерживает его достаточно хорошо. Предыдущий параграф показывает, как включать символы UTF-8 прямо в текст программы без каких-либо проблем, ибо UTF-8 обратно совместима с ASCII, и это все, что нужно PHP. Однако утверждение, что «PHP не поддерживает Unicode» истинно, ибо вызывает множество затруднений в сообществе PHP.</p><h6>Ложные обещания</h6><p>Одной моей мозолью стали функции utf8_encode и utf8_decode. Я часто вижу глупости наподобии «Чтобы использовать Unicode в PHP, нужно вызвать utf8_encode для вводимого текста и utf8_decode для выводимого». Эти две функции обещают некую автоматическую конвертацию текста UTF-8, которая якобы обязательна, ибо «PHP не поддерживает Unicode». Если вы читаете эту статью не по диагонали, то знаете, что</p><ol><li>Ничего специфического нет в UTF-8</li> <li>Вы не можете закодировать текст в UTF-8 постфактум</li> </ol><p>Поясню пункт 2: любой текст уже чем-то закодирован. Когда вы вставляете строки в <a href="/life-hacks-for-smartphones/programmy-s-otkrytym-kodom-dlya-android-ishodnyi-kod-programmy.html">исходный код</a>, они уже имеют кодировку. Точнее, ту кодировку, которую сейчас использует ваш текстовый редактор. Если вы получаете их из бд, они уже закодированы. Если вы читаете их из файла… уже знаете, да?</p><p>Текст либо закодирован в UTF-8, либо не закодирован. Если нет, то он закодирован в ASCII, ISO-8859-1, UTF-16 или как-нибудь еще. Если он не в UTF-8, но предполагается, что он содержит «UTF-8 символы», то у вас когнитивный диссонанс. Если текст все же содержит нужные символы, закодированные в UTF-8, то он в UTF-8. </p><p>Так что же, черт возьми, делает utf8_encode? </p><blockquote>«Переводит строку ISO-8859-1 в кодировку UTF-8» </blockquote><p>Ага! Автор хотел сказать, что функция конвертирует текст из ISO-8859-1 в UTF-8. Вот она для чего. Такое ужасное название ей наверно дал какой-нибудь непредусмотрительный европеец. Тоже самое касается и utf8_decode. Эти функции неприменимы ни для чего, кроме конвертации из ISO-8859-1 в UTF-8. Если вам нужна другая пара кодировок, используйте iconv.<br> utf8_encode – это вам не <a href="/life-hacks-for-windows/volshebnaya-palochka-dlya-vindovs-7-princip-raboty-programmy.html">волшебная палочка</a>, которой нужно махать над каждым словом потому что «PHP не поддерживает Unicode». Она вызывает <a href="/internet/ne-zapuskaetsya-dota-2-reborn-reshenie-problem-reborn-online-lagaet.html">больше проблем</a>, чем решает – скажите спасибо тому европейцу и невежам-программистам.</p><h6>Нативный-шмативный</h6><p>Так что имеют ввиду, когда говорят, что язык поддерживает Unicode? Важно, предполагает ли язык, что один символ занимает один байт, или нет. Так, PHP позволяет получить доступ до выбранного символа, трактуя строку как символьный массив:</p><p>Если $string имеет однобайтную кодировку, то она отдаст нам первый символ. Но только потому, что «character» совпадает с «byte» в однобайтной кодировке. PHP просто отдает первый байт без единой мысли о символах. Строки для PHP – не более, чем последовательности байт, ни больше, ни меньше. Эти ваши «читаемые символы» - не более, чем выдумка человека, PHP на них наплевать.</p><blockquote>01000100 01101111 01101110 00100111 01110100<br> D o n " t<br> 01100011 01100001 01110010 01100101 00100001<br> c a r e ! </blockquote><p>Тоже касается и многих стандартных функций, таких как substr, strpos, trim и прочих. Поддержка прекращается там, где кончается соответствие между байтом и символом:</p><blockquote>11100110 10111100 10100010 11100101 10101101 10010111<br> 漢 字 </blockquote><p> $string для указанной строки отдаст опять же только первый байт, равный 11100110. Другими словами, третий байт символа 漢. Последовательность 11100110 неверна для UTF-8, так что строка теперь тоже неверна. Если вам тоже так кажется, можете попробовать другую кодировку, в которой 11100110 будет каким-нибудь допустимым <a href="/life-hacks-for-pc/kak-pomenyat-parol-ot-vaifaya-na-kompyutere-kak-sdelat-parol-iz.html">случайным символом</a>. Можете веселиться, только не на боевом сервере.</p><p>Вот и все. «PHP не поддерживает Unicode» означает, что большинство функций в языке предполагают, что один байт равен одному символу, что ведет к обрезке многобайтных символов или неверному подсчету длины строки. Это не означает, что вы не можете использовать Unicode в PHP, или что любой текст надо прогонять через utf8_encode, или еще какую-нибудь глупость.</p><p>К счастью, существует <a href="/life-hacks-wi-fi/kak-ekonomit-trafik-s-funkciei-opera-turbo-specialnye-rasshireniya-dlya.html">специальное расширение</a>, которое добавляет все важные строковые функции, но с поддержкой многобайтных кодировок. mb_substr($string, 0, 1, ‘UTF-8’) на вышеупомянутой строке совершенно правильно вернет последовательность 11100110 10111100 10100010, соответствующую символу 漢. Из-за того, что функции нужно думать о том, что она делает, ей нужно передать кодировку. Поэтому эти функции принимают параметр $encoding. К слову, кодировку можно задать глобально для всех функции mb_ с помощью mb_internal_encoding. </p><h6>Употребление и злоупотребление обработкой ошибок PHP</h6><p>Вся проблема (не-)поддержки Unicode в PHP в том, что интерпретатору плевать. Последовательности байт, ха. Нет дела до того, что они значат. Не делается ничего, кроме хранения строк в памяти. У PHP даже понятия такого нет – кодировка. И пока не нужно манипулировать строками, это и не важно. Делается работа с последовательностями байт, которые могут быть всопринятыми кем-то как символы. PHP требует от вас только сохранять исходный код в чем-нибудь, совместимом с ASCII. Парсер PHP ищет конкретные символы, которые говорят ему что делать. 00100100 говорит: «объяви переменную», 00111101 – «присвой», 00100010 – начало или конец строки и т.д. Все, что не важно парсеру, воспринимаются как литералы байтовых последовательностей. Это касается и всего, что заключено в кавычки. Это значит:</p><ol><li>Вам не удастся сохранить исходник с PHP в несовместимую с ASCII кодировку. Например в UTF-16 знак кавычик кодируется как 00000000 00100010. Для PHP, который все воспринимает как ASCII, это NUL-байт, за которым следует кавычка. PHP наверно бы икал на каждый символ оказывался бы NUL.</li> <li>Вы можете сохранить PHP в совместимую с ASCII кодировку. Если первые 128 пунктов кодировки совпадают с ASCII, PHP съест их. Все <a href="/life-hacks-in-vk/chto-znachit-simvol-alfa-simvoly-alfa-i-omega-stadii.html">значимые символы</a> для PHP лежат в пределах первых 128 пунктов, определенных ASCII. Если строковые литералы содержат что-то выходящие за этот предел, PHP не обратит внимание. Вы может сохранить исходник в ISO-8859-1, Mac Roman, UTF-8 или любую другую кодировку. Строковые литеры в вашем коде получат ту кодировку, в которой вы сохраняете файл.</li> <li>Любой <a href="/life-hacks-for-different-systems/vnutrennie-i-vneshnie-komandy-dos-sozdanie-faila-v-ms-dos-osnovnye-vidy.html">внешний файл</a> для PHP может иметь произвольную кодировку. Если парсеру не надо обрабатывать файл, то он останется довольным. <blockquote>$foo = file_get_contents("bar.txt"); </blockquote><p>Написанное выше просто засунет байты из bar.txt в переменную $foo. PHP не будет пытаться ничего интерпретировать, кодировать или совершать другие махинации с содержимым. Файл может содержать бинарные данные или картинку, PHP все равно.</p></li> <li>Если внешняя и внутрення кодировки должны совпадать, то они действительно должны. Обыденным случаем является локализация: в коде вы пишете что-то типа echo localize(‘Foobar’), а во внешем файле это:<blockquote>msgid «Foobar»<br> msgstr "フーバー"<br></blockquote><p>Обе строки Foobar должны иметь идентичное битовое представление. Если исходный код в ASCII, а локализционный – в UTF-16, вам не повезло. Нужно проводить дополнительную конвертацию.</p></li> </ol><p>Проницательный читатель может спросить, скажем, можно ли сохранить последовательно байт UTF-16 в литерал исходного файла в ASCII, и ответ будет всегда такой: конечно.</p><blockquote>01100101 01100011 01101000 01101111 00100000 00100010<br> e c h o "<br> 11111110 11111111 00000000 01010101 00000000 01010100<br> (UTF-16 marker) U T<br> 00000000 01000110 00000000 00101101 00000000 00110001<br> F - 1<br> 00000000 00110110 00100010 00111011<br> 6 " ; </blockquote><p>Первая строка и последние 2 байта – из ASCII. Остальное представлено в UTF-16 2 байтами на символ. Ведущие 11111110 11111111 на второй строке – это маркер начала текста в UTF-16(требует по стандарту, PHP об этом ни черта не слышал). Этот скрипт выводит строку “UTF-16”, закодированную в UTF-16, потому что просто выводит байты между двух кавычек, что и выливается в текст «UTF-16», закодированный в UTF-16. C другой стороны, исходник не является полностью корректным ни в ASCII, ни в UTF-16, так что можете открыть редактор и повеселиться.</p><h6>Итого</h6><p>PHP поддерживает Unicode, или точнее, любую кодировку довольно точно до тех пор, пока вы можете заставить парсер выполнять его работу, а разработчика – понимать, что он делает. Нужно быть внимательным только при работе со строками: деление, удаление пробелов, подсчет и все другие операции, требующие работать с символами, а не байтами. Если ничего не делать со строками, кроме чтения и вывода, то вряд ли возникнут проблемы, которых нет в других языках.</p><h5>Языки с поддержкой кодировок</h5><p>Так что же тогда для языка значит поддерживать Unicode? Javascript например поддерживает Unicode. На самом деле любая строка в Javascript кодирована в UTF-8. И это единственная кодировка, с которой работает Javascript. Вам просто не получить в Javascript строку не в UTF-8. Javascript поклоняется Unicode в такой степени, что в ядре языка просто нет инструментов для работы с другой кодировкой. Раз уж Javascript чаще всего исполняется в браузере, у вас не возникает проблем: браузер способен исполнить тривиальную логику кодирования и декодирования ввода-вывода.</p><p>Прочие языки просто поддерживают кодировки. <a href="/iron/princip-raboty-motora-holodilnika-vnutrennee-ustroistvo.html">Внутренняя работа</a> проводится в какой-то одной кодировке, часто в UTF-16. Но это значит, что им нужно подсказывать в какой кодировке текст, или они сами будут пытаться ее определить. Необходимо указывать в какой кодировке сохранен исходный код, в какой кодировке сохранен файл, который будет прочитан, в какой кодировке нужно осуществлять вывод. Язык проведет конвертацию налету, если будет указано, что нужно использовать Unicode. Они делают все то, что в PHP нужно делать в полуавтоматическом режиме где-то на втором плане. Не лучше и не хуже, чем в PHP, просто по-другому. Хорошая новость в том, что строковые функции наконец просто работают, и вам не нужно думать, содержит ли строка многобайтные символы или не содержат, какие функции выбирать для работы и прочие вещи, которые нужно было бы делать в PHP.</p><h5>Дебри Unicode</h5><p>Раз уж Unicode решает столько <a href="/life-hacks-for-ios/kak-reshit-razlichnye-problemy-so-skaipom.html">различных проблем</a> и работает в множестве различных сценариев, приходится платить за это копанием в дебрях. К примеру, в стандарте Unicode содержится инфорация о решении таких проблем, как унификации иеороглифоф ЯКК . Множество символов, общих для Японии, Китая и Кореи, изображены немного по разному. Или проблемы конвертации символов из нижнего регистра в верхний, наоборот или туда-обратно, которая оказывается не всегда такой простой, как с кодировками западно-европейских языков. Некоторые символы могут быть представлены разными пунктами. Буква ö к примеру может быть представлена пунктом U+00F6(«ЛАТИНСКАЯ МАЛЕНЬКАЯ БУКВА О С ДИЕРЕЗИСОМ») или как два пункта U+006F(«МАЛЕНЬКАЯ БУКВА O») И U+0308(«ПОДСТАВЛЯЕМЫЙ ДИАРЕЗИС»), что значит буква o с ¨. В UTF-8 это либо 2 байта, либо 3 байта, которые в обоих случаях представляют собой нормальный символ. Поэтому есть правила нормализации в стандарте, т.е. как конвертировать эти формы из одной в другую. Это и многое другое находится вне материалов статьи, но об этих моментах нужно знать. </p><h5>Опять ниасилил!</h5><ol><li>Текст – это всегда последовательность бит, которую нужно переводить на естественный язык с помощью таблиц. Неверная таблица – неверный символ.</li> <li>Нельзя работать напрямую с текстом – вы всегда работаете с битами, которые свернуты в абстракции. Ошибки связаны с ошибками в одной из абстракций.</li> <li>Системы, передающие друг другу информацию всегда должны указывать рабочую кодировку. Сайт например говорит браузеру, что он отдает информацию в UTF-8.</li> <li>В наше время UTF-8 обратно совместим с ASCII, несмотря на то, что может кодировать практически любой символ, и тем не менее относительно эффективен в большинстве случаев. Другие кодировки тоже находят применение, но должна быть серьезная причина, чтобы мучиться с кодировками, которые поддерживают только часть Unicode.</li> <li>С проблемой соответствия байта и символа должны разбираться оба: и программа, и программист.</li> </ol><p>Теперь нечего оправдываться, когда вы вновь испортите текст.</p><p>Теги: Добавить метки</p> <script type="text/javascript"> <!-- var _acic={dataProvider:10};(function(){var e=document.createElement("script");e.type="text/javascript";e.async=true;e.src="https://www.acint.net/aci.js";var t=document.getElementsByTagName("script")[0];t.parentNode.insertBefore(e,t)})() //--> </script><br> <br> <script>document.write("<img style='display:none;' src='//counter.yadro.ru/hit;artfast_after?t44.1;r"+ escape(document.referrer)+((typeof(screen)=="undefined")?"": ";s"+screen.width+"*"+screen.height+"*"+(screen.colorDepth? screen.colorDepth:screen.pixelDepth))+";u"+escape(document.URL)+";h"+escape(document.title.substring(0,150))+ ";"+Math.random()+ "border='0' width='1' height='1' loading=lazy>");</script> </div> </article> <div class='yarpp-related'> <div class="related-items"> <div class="headline">Рекомендуем другие статьи</div> <div class="items"> <div class="item"> <a href="/reviews/kak-prazdnovat-letnee-solncestoyanie-kak-prazdnovat-letnee-solncestoyanie.html" class="item__link"> <img src="/uploads/d002eb7ee7f8ca5839027a5ec58464a2.jpg" width="220" height="170" alt="Как праздновать летнее солнцестояние Эммануэль Дагер: Исцеляющее солнцестояние" class="item__image" / loading=lazy> <div class="item__title">Как праздновать летнее солнцестояние Эммануэль Дагер: Исцеляющее солнцестояние</div> </a> </div> <div class="item"> <a href="/internet/programmirovanie-mikrokontrollerov-dlya-nachinayushchih-legko-i.html" class="item__link"> <img src="/uploads/cc080e5fe541f0a30c5c0fdf1654e93a.jpg" width="220" height="170" alt="Программирование микроконтроллеров AVR для начинающих Программирование контроллеров avr для начинающих" class="item__image" / loading=lazy> <div class="item__title">Программирование микроконтроллеров AVR для начинающих Программирование контроллеров avr для начинающих</div> </a> </div> <div class="item"> <a href="/life-hacks-for-ios/pochemu-planshet-ne-vyklyuchaetsya-chto-delat-zavis-planshet---chto-delat-vozmozhnye.html" class="item__link"> <img src="/uploads/5ee684d277379108d1f4344cff82eff8.jpg" width="220" height="170" alt="Завис планшет - что делать?" class="item__image" / loading=lazy> <div class="item__title">Завис планшет - что делать?</div> </a> </div> </div> </div> </div> </main> <aside class="sidebar"> <div class="section"> <div class="section__headline">Самое популярное</div> <div class="sidebar-items"> <a class="sidebar-item" href="/program/videonablyudenie-cherez-usb-kameru-besprovodnaya-usb-kamera-kupit.html"> <img src="/uploads/c5ad1ebb2eec805aceb765a476962621.jpg" width="75" height="75" alt="Беспроводная USB камера купить беспроводную мини камеру компьютера Цифровая камера с usb выходом" class="sidebar-item__image" / loading=lazy> <div class="sidebar-item__title">Беспроводная USB камера купить беспроводную мини камеру компьютера Цифровая камера с usb выходом</div> </a> <a class="sidebar-item" href="/life-hacks-for-pc/sem-putei-voiti-v-svoi-lichnyi-kabinet-stoloto-russkoe-loto-obman.html"> <img src="/uploads/ef0eb579f517d663a977671e7a51ce14.jpg" width="75" height="75" alt="Столото, Русское лото – обман?" class="sidebar-item__image" / loading=lazy> <div class="sidebar-item__title">Столото, Русское лото – обман?</div> </a> <a class="sidebar-item" href="/internet/v-chem-smysl-maininga-kak-rabotaet-maining-kriptovalyuty-process.html"> <img src="/uploads/e7ccb6fbe0cf024cedb045c511cf5fad.jpg" width="75" height="75" alt="Как работает майнинг криптовалюты Процесс майнинга криптовалют" class="sidebar-item__image" / loading=lazy> <div class="sidebar-item__title">Как работает майнинг криптовалюты Процесс майнинга криптовалют</div> </a> <a class="sidebar-item" href="/game/professiya-programmist-dlya-detei-konspekt-zanyatiya-v-detskom.html"> <img src="/uploads/9d0201b81adc610408d4507ccf6f9186.jpg" width="75" height="75" alt="Конспект занятия в детском саду «Программист – великий волшебник" class="sidebar-item__image" / loading=lazy> <div class="sidebar-item__title">Конспект занятия в детском саду «Программист – великий волшебник</div> </a> <a class="sidebar-item" href="/life-hacks-for-ios/aliekspress-prosit-ukazat-proverochnyi-kod-pri-vhode-chto.html"> <img src="/uploads/85f99bb622febba2f51f6ce46c571a8f.jpg" width="75" height="75" alt="Как пройти проверку при входе в аккаунт на Алиэкспресс?" class="sidebar-item__image" / loading=lazy> <div class="sidebar-item__title">Как пройти проверку при входе в аккаунт на Алиэкспресс?</div> </a> <a class="sidebar-item" href="/game/otklyuchenie-uslugi-mobilnye-podpiski-kak-uznat-kakie-platnye.html"> <img src="/uploads/ce520cb58283add55341e217e52bd195.jpg" width="75" height="75" alt="Как узнать какие платные подписки от мегафон подключены и как их отключить" class="sidebar-item__image" / loading=lazy> <div class="sidebar-item__title">Как узнать какие платные подписки от мегафон подключены и как их отключить</div> </a> </div> </div> <script> // <![CDATA[ $(document).ready(function() { var floatsidebar = $("#float-sidebar"); var offset = floatsidebar.offset(); var left = offset.left; var top = offset.top; var width = $("#float-sidebar").width(); var height = $("#float-sidebar").height(); $(window).scroll(function() { var scrollTop = $(window).scrollTop(); if (scrollTop >= top) { $('#float-sidebar').css({ left: left + 'px', position: 'fixed', top: "50px", width: width + "px" }); } else { $('#float-sidebar').css({ position: 'static', }); } }); }); // ]]> </script> <div id="float-sidebar"> <div id="laqybe1" style="height:500px;width:270px;" align="center"></div> </div> </aside> </div> <footer class="footer"> <div class="footer-left"> <div class="footer__logo"> <div class="footer__logo-sitename">radiobud.ru</div> </div> <div class="footer__copyright"> <p>© 2024 - radiobud.ru<br /></p> <p>Обзоры, лайфхаки, игры, программы</p> </div> <nav class="footer__nav-1"> <ul> <li class="menu-item type-post_type object-page "><a href="/sitemap.xml">Карта сайта</a></li> </ul> </nav> </div> <nav class="footer__nav-2"><ul> <li class="menu-item type-taxonomy object-category "><a href="/feedback.html">Контакты</a></li> <li class="menu-item type-taxonomy object-category "><a href="">Реклама</a></li> <li class="menu-item type-taxonomy object-category "><a href="">О сайте</a></li> </ul></nav> <div class="footer__counters"> </div> <div class="footer__note"></div> </footer> </div> </div> <script type='text/javascript' src='https://radiobud.ru/wp-content/themes/radiobud.ru/js/scripts.js'></script> <script type='text/javascript' src='/wp-includes/js/comment-reply.min.js?ver=4.9.1'></script> <script type='text/javascript'> /* <![CDATA[ */ var tocplus = { "smooth_scroll":"1","visibility_show":"\u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c","visibility_hide":"\u0421\u043a\u0440\u044b\u0442\u044c","width":"Auto"} ; /* ]]> */ </script> <script type='text/javascript' src='https://radiobud.ru/wp-content/plugins/table-of-contents-plus/front.min.js?ver=1509'></script> <script type='text/javascript' src='/wp-includes/js/wp-embed.min.js?ver=4.9.1'></script> <script async="async" type='text/javascript' src='https://radiobud.ru/wp-content/plugins/akismet/_inc/form.js?ver=4.0.2'></script> </body> </html>