Shell ������ ��� �����

Символы Unicode: о чём должен знать каждый разработчик

Если вы пишете международное приложение, использующее несколько языков, то вам нужно кое-что знать о кодировке. Она отвечает за то, как текст отображается на экране. Я вкратце расскажу об истории кодировки и о её стандартизации, а затем мы поговорим о её использовании. Затронем немного и теорию информатики.

Введение в кодировку

Компьютеры понимают лишь двоичные числа — нули и единицы, это их язык. Больше ничего. Одно число называется байтом, каждый байт состоит из восьми битов. То есть восемь нулей и единиц составляют один байт. Внутри компьютеров всё сводится к двоичности — языки программирования, движений мыши, нажатия клавиш и все слова на экране. Но если статья, которую вы читаете, раньше была набором нулей и единиц, то как двоичные числа превратились в текст? Давайте разберёмся.

Краткая история кодировки

На заре своего развития интернет был исключительно англоязычным. Его авторам и пользователям не нужно было заботиться о символах других языков, и все нужды полностью покрывала кодировка American Standard Code for Information Interchange (ASCII).

ASCII — это таблица сопоставления бинарных обозначений знакам алфавита. Когда компьютер получает такую запись:

то с помощью ASCII он преобразует её во фразу «Hello world».

Один байт (восемь бит) был достаточно велик, чтобы вместить в себя любую англоязычную букву, как и управляющие символы, часть из которых использовалась телепринтерами, так что в те годы они были полезны (сегодня уже не особо). К управляющим символам относился, например 7 (0111 в двоичном представлении), который заставлял компьютер издавать сигнал; 8 (1000 в двоичном представлении) — выводил последний напечатанный символ; или 12 (1100 в двоичном представлении) — стирал весь написанный на видеотерминале текст.

В те времена компьютеры считали 8 бит за один байт (так было не всегда), так что проблем не возникало. Мы могли хранить все управляющие символы, все числа и англоязычные буквы, и даже ещё оставалось место, поскольку один байт может кодировать 255 символов, а для ASCII нужно только 127. То есть неиспользованными оставалось ещё 128 позиций в кодировке.

Вот как выглядит таблица ASCII. Двоичными числами кодируются все строчные и прописные буквы от A до Z и числа от 0 до 9. Первые 32 позиции отведены для непечатаемых управляющих символов.

Проблемы с ASCII

Позиции со 128 по 255 были пустыми. Общественность задумалась, чем их заполнить. Но у всех были разные идеи. Американский национальный институт стандартов (American National Standards Institute, ANSI) формулирует стандарты для разных отраслей. Там утвердили позиции ASCII с 0 по 127. Их никто не оспаривал. Проблема была с остальными позициями.

Вот чем были заполнены позиции 128-255 в первых компьютерах IBM:

Какие-то загогулины, фоновые иконки, математические операторы и символы с диакретическим знаком вроде é. Но разработчики других компьютерных архитектур не поддержали инициативу. Всем хотелось внедрить свою собственную кодировку во второй половине ASCII.

Все эти различные концовки назвали кодовыми страницами.

Что такое кодовые страницы ASCII?

Здесь собрана коллекция из более чем 465 разных кодовых страниц! Существовали разные страницы даже в рамках какого-то одного языка, например, для греческого и китайского. Как можно было стандартизировать этот бардак? Или хотя бы заставить его работать между разными языками? Или между разными кодовыми страницами для одного языка? В языках, отличающихся от английского? У китайцев больше 100 000 иероглифов. ASCII даже не может всех их вместить, даже если бы решили отдать все пустые позиции под китайские символы.

Эта проблема даже получила название Mojibake (бнопня, кракозябры). Так говорят про искажённый текст, который получается при использовании некорректной кодировки. В переводе с японского mojibake означает «преобразование символов».

Пример бнопни (кракозябров).

Безумие какое-то.

Именно! Не было ни единого шанса надёжно преобразовывать данные. Интернет — это лишь монструозное соединение компьютеров по всему миру. Представьте, что все страны решили использовать собственные стандарты. Например, греческие компьютеры принимают только греческий язык, а английские отправляют только английский. Это как кричать в пустой пещере, тебя никто не услышит.

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

��� Если только ������ вы не хотели ��� бы ��� читать подобные параграфы. �֎֏0590֐��׀ׁׂ׃ׅׄ׆ׇ

Так появился Unicode

Unicode расшифровывают как Universal Coded Character Set (UCS), и у него есть официальное обозначение ISO/IEC 10646. Но обычно все используют название Unicode.

Этот стандарт помог решить проблемы, возникавшие из-за кодировки и кодовых страниц. Он содержит множество кодовых пунктов (кодовых точек), присвоенных символам из языков и культур со всего мира. То есть Unicode — это набор символов. С его помощью можно сопоставить некую абстракцию с буквой, на которую мы хотим ссылаться. И так сделано для каждого символа, даже египетских иероглифов.

Кто-то проделал огромную работу, сопоставляя каждый символ во всех языках с уникальными кодами. Вот как это выглядит:

Префикс U+ говорит о том, что это стандарт Unicode, а число — это результат преобразования двоичных чисел. Стандарт использует шестнадцатеричную нотацию, которая является упрощённым представлением двоичных чисел. Здесь вы можете ввести в поле что угодно и посмотреть, как это будет преобразовано в Unicode. А здесь можно полюбоваться на все 143 859 кодовых пунктов.

Читайте также:  Linux очистить файлы логов

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

Осталось добавить последний ингредиент.

Unicode Transform Protocol (UTF)

UTF — протокол кодирования кодовых пунктов в Unicode. Он прописан в стандарте и позволяет кодировать любой кодовый пункт. Однако существуют разные типы UTF. Они различаются количеством байтов, используемых для кодировки одного пункта. В UTF-8 используется один байт на пункт, в UTF-16 — два байта, в UTF-32 — четыре байта.

Но если у нас есть три разные кодировки, то как узнать, какая из них применяется в конкретном файле? Для этого используют маркер последовательности байтов (Byte Order Mark, BOM), который ещё называют сигнатурой кодировки (Encoding Signature). BOM — это двухбайтный маркер в начале файл, который говорит о том, какая именно кодировка тут применена.

В интернете чаще всего используют UTF-8, она также прописана как предпочтительная в стандарте HTML5, так что уделю ей больше всего внимания.

Этот график построен в 2012-м, UTF-8 становилась доминирующей кодировкой. И всё ещё ею является.

Что такое UTF-8 и как она работает?

UTF-8 кодирует с помощью одного байта каждый кодовый пункт Unicode с 0 по 127 (как в ASCII). То есть если вы писали программу с использованием ASCII, а ваши пользователи применяют UTF-8, они не заметят ничего необычного. Всё будет работать как задумано. Обратите внимание, как это важно. Нам нужно было сохранить обратную совместимость с ASCII в ходе массового внедрения UTF-8. И эта кодировка ничего не ломает.

Как следует из названия, кодовый пункт состоит из 8 битов (один байт). В Unicode есть символы, которые занимают несколько байтов (вплоть до 6). Это называют переменной длиной. В разных языках удельное количество байтов разное. В английском — 1, европейские языки (с латинским алфавитом), иврит и арабский представлены с помощью двух байтов на кодовый пункт. Для китайского, японского, корейского и других азиатских языков используют по три байта.

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

И теперь мы, как по волшебству, пришли к соглашению, как закодировать шумерскую клинопись (Хабр её не отображает), а также значки emoji!

Подытожив сказанное: сначала читаем BOM, чтобы определить версию кодировки, затем преобразуем файл в кодовые пункты Unicode, а потом выводим на экран символы из набора Unicode.

Напоследок про UTF

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

Как нам задавать кодировку? Поскольку HTML пишется на английском, и почти все кодировки прекрасно работают с английским, мы можем указать кодировку в начале раздела .

Важно сделать это в самом начале , поскольку парсинг HTML может начаться заново, если в данный момент используется неправильная кодировка. Также узнать версию кодировки можно из заголовка Content-Type HTTP-запроса/ответа.

Если HTML-документ не содержит упоминания кодировки, спецификация HTML5 предлагает такое интересное решение, как BOM-сниффинг. С его помощью мы по маркеру порядка байтов (BOM) можем определить используемую кодировку.

Это всё?

Unicode ещё не завершён. Как и в случае с любым стандартом, мы что-то добавляем, убираем, предлагаем новое. Никакие спецификации нельзя назвать «завершёнными». Обычно в год бывает 1-2 релиза, найти их описание можно здесь.

Если вы дочитали до конца, то вы молодцы. Предлагаю сделать домашнюю работу. Посмотрите, как могут ломаться сайты при использовании неправильной кодировки. Я воспользовался этим расширением для Google Chrome, поменял кодировку и попытался открывать разные страницы. Информация была совершенно нечитаемой. Попробуйте сами, как выглядит бнопня. Это поможет понять, насколько важна кодировка.

Заключение

При написании этой статьи я узнал о Майкле Эверсоне. С 1993 года он предложил больше 200 изменений в Unicode, добавил в стандарт тысячи символов. По состоянию на 2003 год он считался самым продуктивным участником. Он один очень сильно повлиял на облик Unicode. Майкл — один из тех, кто сделал интернет таким, каким мы его сегодня знаем. Очень впечатляет.

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

Источник

Как Shell обманывает своих клиентов

Всем привет!
С 30 июля по 24 сентября на заправках Shell проводится акция, где можно, заправляясь их фирменным топливом, накапливать «литры» и обменивать их на скидку 50% на самокаты.

Купив по этой акции, самокат и шлем сыну и, убедившись, что по качеству они добротные, жена сказала, что хочет взрослый самокат. Но с терпением у нее не очень (чтобы получить скидку нужно заправить 100 литров бензина) она показала мне вторую акцию, которую проводит компания. Итак, внимание:

Итак, что мы видим на странице акции:

Только по пятницам при заправке от 30 литров Shell V-Power покупай самокаты, шлемы и комплекты защиты Ferrari по промоцене!*
Период акции – с 30 июля по 24 сентября
Взрослый самокат – 4999 рублей
Трюковой самокат – 4749 рублей
Детский самокат – 2 999 рублей
Шлем – 1 599 рублей
Комплект защиты – 1 699 рублей

*Акция действительна только по пятницам с 00 ч.00 мин.01 сек. до 23 ч.59 мин. 59сек. по московскому времени в период с 30 июля по 24 сентября включительно

Пятница, 22 часа, заправка Shell, я захожу с 3х летним ребенком
— Здравствуйте, я хотел бы самокат купить, вроде 30 литров надо заправить?
— Здравствуйте, да, все верно. Вам детский?
— Нет, детский уже есть. Я хотел бы купить взрослый.
— Ой, к сожалению взрослый по этой акции купить нельзя
И тут я замер просто
— Как нельзя, вот ваш сайт с акцией (показываю ей сайт)
— Там наверное ошибка
— Вот вам правила акции
При ней скачиваю с той же страницы файл с правилами и тычу им ей в лицо.

После минут 15 изучения правил, сотрудником бензоколонки она повторила, что не может продать и показывает интересную бумажку.
Внутренний приказ компании запрещающий продавать взрослые самокаты по пятничной акции

Важность: супер важный документ
По второй акции взрослые самокаты не продавать, по первой можно

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

Понимая, что если я залечу к продавщице и скажу, что хочу скидку на взрослый самокат за 30 литров в пятницу, то она скажет из нет в наличии и на этом все и закончится. Я решил схитрить:
— Хочу самокат за литры купить взрослый. У вас есть он в наличии? Хочу красный
— А вы заказали уже?
— Нет, сейчас 20 литров заправлю и будет хватать, если у вас нет, я поеду на другую заправку.
— Да, у нас он есть
— Ой, знаете, сегодня пятница, я хочу купить его по акции с 30 литрами в пятницу
Тут продавщица начала потеть
— Для этой акции у нас самокатов нет
— Для этой акции они у вас волшебные что ли
— Я ошиблась у нас нет в наличии, езжайте на другую заправку

Поддержка у shell работает до 19 и только по будням. Позвонить и спросить «какого х***» не кому. Самокат мне не продают. В общем, очень расстроился и разочаровался в красно-желтом заправщике.

Буду звонить в понедельник в поддержку и выяснять что и как, но подозреваю, что все будут отрицать и убеждать, что товара просто нет в наличии, несмотря на то, что есть фото приказа. А самокат то хочется (
Считаю, что меня обманули. Может можно из как-то за это привлечь? Или пусть хоть в следующую пятницу самокат продадут)

По итогу, я расстроился и остался без самоката, shell потерял постоянного клиента.
Всем спасибо за внимание!

Дубликаты не найдены

Думаю этот пункт вертел всех желающих с их самокатами для взрослых.

Тому, кто это придумал, нужно в голову гвоздь сотку забить приговаривая «не является телесными повреждениями».

«Не является офертой»

А для реальных пацанов Страдивари делал барабаны.

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

Зачем звонить в поддержку, если можно написать Наталие Шкоде лично прямо во ВКонтакте и узнать из первых рук?

Бензин у Шелла тоже стал хреновый (МСК) — замерял на двух ТС от заправки до заправки под пробку с обнулением одометра и с пересчитыванием в литры на сотню — Королла 16 года жрет 9,5 литров в смешанном 50/50 режиме, мотоцикл Кава Вулкан жрет 7литров (70 трасса/30 город). На бензине ВР соотвественно 8,2 и 5,8 литров на сотню. Отказался, перешел на ВР. До этого исключительно у Шелла заправлялся с картой клиента.

ППП, или как я чуть не попал в сексуальную деструктивную секту

История эта произошла со мной в конце нулевых. Тогда я нашел одну интересную книгу «Бодхи – практика прямого пути». Это про психическое самосовершенствование, в частности про то, как устранять негативные эмоции. Техники там указывались интересные, и я загорелся обсудить их с практикующими. Сам Бодхи на своем сайте указал сайт сбора таких практиков, и я туда поперся. К моему удивлению, сайт оказался закрытым. В смысле он работал, но сообщал, что доступ к сайту через комиссию. Которая рассматривает каждого кандидата – достоин или нет. И мне предлагалось заполнить анкету на соискательство по приобщению к великой мудрости. Вопросы в анкете были весьма личного плана. Не, код от кредитной карты там не спрашивали, но про отношение к гомосексуальному коитусу было вопросов 5 и т.п. Я честно ответил и стал ждать решения комиссии.

Через пару дней меня пригласили на виртуальное собеседование. Типа в текстовый чат. И, используя данные моей анкеты, меня знатно поунижали и пооскорбляли. И вынесли вердикт – мол негоден к приобщению. Диагноз подтвердили умными терминами из книги Бодхи. Почему я сразу не послал их подальше в самом начале? Да потому что тогда у меня совсем не было опыта Интернет-срачей. Я даже в политические форумы не ходил тогда. И я поздно сообразил что здесь происходит.

Я обиделся. В прямом смысле слова сам себя подставил. Не дай я им информацию о себе личного плана, они бы не смогли меня так задеть. Ну да сам виноват! Хороший урок! Но я все равно не успокаивался. Я совсем не кулц хакер, но решил попробовать взломать их сайт. Обида, она такая! На мое удивление, там и взламывать то сильно ничего не надо было. Системы безопасности не было как таковой. И я попал не только на их закрытый раздел для ищущих истины, но и на самый закрытый раздел, где тусовались самые гуру. Те, кто меня типа тестировал. И знаете что они горячо обсуждали?

Чтобы понять предмет их обсуждения, пару слов о методе ППП. Там было спорное утверждение о том, что если вас трахают на нелюбимой Вами работе по 12 часов в день, то может стоить стать проституткой/проститутом. Там за те же деньги будут трахать всего лишь 1 час в день. Правда в прямом, а не в переносном смысле этого слова. И, как я понял, гуру этой практики создали свой бордель, где часть из них были шлюхами, часть – сутенерами. И в особо закрытом разделе сайте они обсуждали обычные для такого бизнеса проблемы. Опять таки, очень горячо обсуждали!

Например, почему сутенер платит им в два раза меньше чем обещал? Почему девку везли на секс с одним русским, а оттрахали ее во все дырки четверо кавказцев? Но вишенкой на торте стали страдания одного проститута. Он не был геем, но согласился приторгануть своим задом. Ну так вот, ему обещали, что любовник будет нежным. А оказался, что клиент был зеком, и разорвал в порыве страсти его девственную попку к чертям собачьим. И не доплатил. Ну, в общем, обычные проблемы начинающего разнопланового борделя.

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

Внимание всем, кто хочет купить квартиру в Сочи!

Второй мой пост про недвижимость в Сочи, ибо уже накипело.
Меня бесит скотское отношение к людям, которое исходит от этих никчемных жалких наебщиков — риэлторов. Я знаю пару-тройку хороших риэлторов, остальные же.

Часть первая. Продажа квартиры.
Собственник решает разместить квартиру на продажу. Где обычно размещают? Сейчас это не бумажные объявления, а электронные доски: Циан, Авито и т.д.
Итак, есть квартира, метраж — 80м2, цена по рынку без борзоты — 16млн (да, да, рыночный низ сейчас в Сочи — это 200.000/м2). Собственник публикует объявление и. Его блокируют. Что такое? Почему?
А) А всё просто: эти же фотографии (с водяными знаками сайта даже) размещают другие риэлторы, но с ценой 14млн. Вы теперь на этом фоне становитесь риэлтором, ведь там 14млн, а здесь ваши 16млн. Могут объявление заблокировать (дублирует имеющееся)
Б) На рынке много неликвида 60-70м2, цена 16-18млн. А тут вы со своим объявлением со вкусной ценой. Что происходит? Отдел продаж массово на сайте кликает «пожаловаться» в Вашем объявлении. Всё, Вашего объявления нет. Как продавать? К риэлтору.

Часть вторая. Переезд в Сочи
В Сочи очень много граждан с Сибири и Урала, на просмотры квартир не налетаешься и сейчас же вообще есть очень удобная штука: онлайн-показ.
Покупатель из отдаленного города N смотрит квартиру на сайте агенства (потому что, как Вы поняли, на обычных сайтах объявлений ничего не найти из живого) и говорит:
— отлично! Хороший вариант за 5млн площадью 50м2. И до центра Сочи 10 минут на машине.
— бронируем под Вас, чтобы не ушла?
— да! Я сейчас продаю своб квартиру и вылетаю в Сочи, чтобы сразу заехать в новую.
— мы Вас встретим в аэропорту
Человек продает квартиру (глупость, которую совершают сейчас массово) в отдаленном городе N и летит в Сочи со своими 5млн. Мы помним, что низ рынка сейчас — это 200.000р/м2. Прилетев в Сочи, его радостно встречают и везут в офис для оформления документов:
— Вы знаете, Ваш задаток у нас, но тут нюанс. Собственник решил поднять цену с 5млн.
— сколько хочет? 6? Давайте, что уж делать, уже прилетел и там продал
— 13млн
— как 13?! Было же 5млн! Как так?!
— ну, мы ничего сделать не можем, так решил собственник, это его право
— так найдите мне другую квартиру за 5млн!
— да, есть несколько вариантов, но 20м2
— какие 20м2?!
— сейчас цены поднялись, квадратный метр от 200.000р, в среднем уже 250.000-300.000р. Мы можем предложить Вам малосемейку в 20м2 (это помещение общажного типа, где раньше был сортир на этаж и так же кухня, а потом себе каждый подвёл водопровод и канализацию)
— Вы охренели? Куда я теперь?! У меня квартиры нет
— берите что есть, завтра цены могут ещё подняться.
И человек берет. Потому что завтра реально цены будут ещё выше, скорее всего.

Итог: дорогие граждане, желающие жить на юге страны, не стройте себе иллюзий на счёт цен в Сочи. Реальный низ рынка сейчас 200.000 за квадратный метр. Средняя цена уже около 250-300. Прежде чем переехать в Сочи в неизвестность, снимите квартиру месяца на три и с утра до вечера колесите по городу, общайтесь с местными жителями, с потенциальными соседями и лишь потом переходите к сделке по интересующей квартире.

А в целом: когда уже этот бардак на рынке недвижимости с «фонарями» прекратится? Принципиально не буду работать с такими ушлыми риэлторами, которые за деньги продадут кого угодно.
Может стоит правительству разработать какой-то закон по урегулированию всей этой мерзкой деятельности?

Источник

Оцените статью