L; кодування - Навчання Learn l; HTML Grafikart
Вступ
Основа
Практична робота
Сьогодні я пропоную вам зупинитися на принципі кодування символів. Розуміння того, як ваш комп’ютер кодує ваші файли, допоможе вам уникнути багатьох помилок. Однією з типових проблем, з якою ми стикаємось, коли ми починаємо писати наші перші файли HTML, є поява "дивних" символів замість наголошених символів.

Наприклад, речення:
Що відображається в браузері наступним чином:
Що таке кодування
Проблема з комп’ютерами полягає в тому, що наш комп’ютер працює не з літерами, а в двійковому (з 0 і 1). Для вашого комп'ютера ваша HTML-сторінка не схожа на те, що ви бачите у своєму редакторі, а виглядає як серія бітів.
Для комп’ютера:
Біти організовані в групи по вісім, які називаються байтами. Кожен байт використовується для представлення значень в діапазоні від 0 до 255. Раптом для вашого комп'ютера ваш файл не є ні більшим, ні меншим, ніж серія чисел. Щоб отримати символи на екрані, нам просто потрібно створити таблицю, яка робить ці різні цифри відповідними символу з нашого алфавіту. Є кілька таблиць, що відповідають різним регіонам та алфавітам.
Наприклад, таблиця ASCII може представляти 128 символів (це кодування використовує лише 7 бітів із 8, доступних у байті). Ця таблиця достатня для американців, але не обов'язково підходить для країн з більш повним алфавітом.
Наприклад, для західноєвропейських країн Windows використовує систему кодування Windows 1252, тоді як Mac OS використовує кодування MacRoman. Ці дві системи кодування засновані на використанні 8 бітів байта для представлення 256 символів (що достатньо для оброблених мов), але деякі букви не обов'язково знаходяться в однаковому положенні від однієї таблиці до наступної. ' інший.
Помноження таблиць кодування дає змогу зрозуміти проблеми, які можна мати на рівні спеціальних символів. Якщо ви пишете свій файл із певною системою кодування, але читаєте його за допомогою іншої системи кодування, деякі символи можуть бути замінені або замінені "дивними" символами.
Unicode та UTF8
Спочатку ці проблеми з кодуванням не були надто складними, оскільки ми не обов’язково обмінювалися файлами між країнами. Але з розвитком Інтернету нам довелося знайти спосіб спілкування та обміну повідомленнями з людьми, які не обов’язково мають однаковий алфавіт (і, отже, однаковий спосіб кодування текстів). І ось як народився Unicode, це система, яка дозволить обмін усіма мовами світу, створивши систему кодування, де всі символи матимуть унікальний числовий ідентифікатор. Цей стандарт охоплює понад 120 000 символів, але потім створює проблему: як представити стільки символів у двійковому вигляді.
Першою ідеєю було б використовувати кілька байтів для представлення кожного з наших персонажів. Основним недоліком цього підходу є те, що тоді всі символи займають більше місця, роблячи файли більшими для обміну. І тут з’являється UTF-8.
UTF-8 - це система кодування, яка буде кодувати символи, використовуючи різну кількість байтів. Деякі символи займуть лише один байт, тоді як інші - кілька. Потім проблема полягає в тому, щоб комп’ютер визначив, скільки байт кодується символ на даний момент.
- Для запуску UTF 8 використовується таблиця символів ASCII для перших 127 символів.
- Для символів із значенням, що перевищує 127, UTF 8 потім використовуватиме кілька байтів із зазначенням кількості байт для використання з використанням перших бітів
- 110xxxxx 10xxxxxx
- 1110xxxx 10xxxxxx 10xxxxxx
- 11110xxx 10xxxxxx 10xxxxxx
Цей метод простий і може бути узагальнений наступним чином:
- Код префікса (110, 1110, 11110) використовується для визначення кількості байтів, які слід використовувати для читання символу.
- Байти, що починаються з 10, є байтами продовження
- Байти, що починаються з 0, представляють доступний символ у таблиці ASCII (що дозволяє UTF-8 бути сумісним з кодуванням ASCII).
- Щоб отримати число, просто візьміть решту бітів
Наприклад, якщо ми читаємо байти 01101000 11000011 10101001
Перший байт починається з 0, отримуючи 104 у десяткових кодах, і тому відповідає h у таблиці Unicode
Другий байт починається з двох 1, тому ми повинні взяти 2 байти і видалити префікси:
00011101001 відповідає номеру 233 в десятковому і букві é в таблиці Unicode. Тож 01101000 11000011 10101001 відобразить привіт на екрані.
А UTF-16 краще ?
UTF-16 - це кодування, яке базується на тому ж принципі змінних розмірів, але яке кодує символи на 2 байти за замовчуванням (що подвоює вагу для використання перших символів, але може бути цікавішим для деяких мов). Це кодування не представлятиме великого інтересу для HTML, оскільки теги складаються лише з символів на початку таблиці (це кодування, як правило, створює важчі сторінки, і тому не буде цікавим, те саме стосується і UTF-32).