1.2.3 Стандарти кодування тексту

Тема
Матеріали

Зазвичай під час надання спільного доступу до файлів, наприклад, у Google Sheets, вам не потрібно турбуватися про спосіб збереження даних. Однак, якщо ви надсилаєте файли комусь, хто використовує іншу мову інтерфейсу, завантажуєте файли з Інтернету або відкриваєте їх на комп’ютері з іншою операційною системою, під час відкриття або збереження цих файлів може знадобитися вибрати стандарт кодування. Насправді, текст, який ви бачите на екрані – це числові значення, збережені в текстовому файлі. Комп’ютер перетворює їх на видимі символи. Для цього він застосовує стандарт кодування.   

 Стандарт кодування – це схема нумерації, згідно з якою кожному текстовому символу в наборі відповідає певне числове значення. Набір символів може містити буквені, числові та інші символи. Зазвичай мови складаються з різних наборів символів, тому для їх відображення передбачена ціла низка різних стандартів кодування. Комп’ютер використовує відомості про стандарт кодування, збережені в текстовому файлі, щоб відобразити текст на екрані.   

Наприклад, у кодуванні "Кирилиця (Windows)" символу "Й" відповідає числове значення 201. Коли ви відкриваєте файл, що містить цей символ, комп’ютер, на якому використовується кодування "Кирилиця (Windows)", зчитує числове значення 201 і відображає на екрані букву "Й". Однак, якщо відкрити цей самий файл на ПК, на якому за замовчуванням використовується інше кодування, буде відображений той символ, якому призначене числове значення 201 у цьому стандарті кодування. Наприклад, якщо на комп’ютері використовується кодування "Західна Європа (Windows)", символ "Й" із вихідного файлу на основі кирилиці буде відображений як "É", оскільки в застосованому кодуванні значенню 201 відповідає цей символ.  

Базовою точкою для розвитку сучасних кодувань текстів вважають кодування ASCII (American Standard Code for Information Interchange). Це кодування, що використовує 1 байт для опису одного символу. В ASCII описано 128 поширених символів – це латинські літери, арабські цифри, розділові і деякі службові знаки: дужки, решітка, зірочка тощо. Саме ці 128 символів з ASCII стали стандартом і в такому порядку присутні в інших кодуваннях. Але за допомогою одного байта інформації можна закодувати не 128 (27), а 256 (28) різних значень, тому слідом за базовою версією ASCII з'явився цілий ряд розширених кодувань ASCII, в яких можна було, крім 128 основних символів, закодувати ще й символи національного кодування (наприклад, кирилицю).  

Проте, в сучасному світі, окрім звичної для нас кирилиці, існують також інші алфавіти із значно більшою кількістю символів, ніж в кирилиці. Наприклад, мови країн Південно-Східної Азії, де символів – тисячі, і їх неможливо описати в одному байті інформації, який виділяється для кодування символів в ASCII. Для вирішення цієї проблеми був створений консорціум Юнікод (Unicode – Unicode Consortium) при співпраці багатьох виробників програмного та комп’ютерного забезпечення, розробників шрифтів, ІТ-спеціалістів, зацікавлених у створенні універсального кодування тексту.  

 Першим кодуванням тексту, що вийшло під егідою консорціуму Юнікод, було кодування UTF-32. Цифра в назві кодування означає кількість біт, що використовується для кодування одного символу. Для кодування одного символу в новому універсальному кодуванні UTF-32 використано 4 байти (1 байт = 8 біт) інформації. В результаті цього файл з текстом, що закодований в UTF-32, став мати розмір в чотири рази більше, ніж у розширеному кодуванні ASCII, проте з'явилася можливість закодувати 232 символи. Багатьом країнам з мовами європейської групи зовсім не було необхідності використовувати в кодуванні таку кількість символів, при цьому вони отримували чотириразове збільшення ваги текстових документів і, в результаті, збільшення обсягу Інтернет трафіку та обсягу збережених даних.   

Подальшим розвитком універсального кодування стало UTF-16, яке вийшло настільки вдалим, що було прийнято за замовчуванням як базовий простір для всіх символів, які використовуються. Для кодування одного символу UTF-16 використовує два байти. В UTF-16 можна закодувати 65 536 символів (216), що було прийнято за базовий простір в Юнікод.  

 Вдала версія UTF-16 знову не принесла переваг для європейських користувачів, бо у них після переходу від розширеної версії кодування ASCII до UTF-16 вага документів все ще збільшувалася в два рази (один байт на один символ в ASCII і два байти на той же символ у кодуванні UTF-16). Саме для вирішення цієї проблеми в консорціумі Юнікод було запропоноване кодування тексту змінної довжини UTF-8.   

 UTF-8 є повноцінним кодуванням змінної довжини, тобто кожен символ тексту може бути закодований в послідовність довжиною від одного до шести байт. На практиці в UTF-8 використовується тільки діапазон від одного до чотирьох байт, оскільки більше за чотири байти коду нічого вже навіть теоретично неможливо уявити.  

 В UTF-8 всі латинські символи кодуються в один байт, подібно до ASCII. У разі кодування тільки латиниці, навіть ті програми, які не розуміють Юнікод, все одно прочитають те, що закодовано в UTF-8. Тобто, базова частина кодування ASCII перейшла в UTF-8. Кириличні символи в UTF-8 кодуються в два байти, а, наприклад, грузинські – в три байти. Тобто, саме завдяки такій гнучкості, кодування UTF-8 зараз є домінуючим у веб-просторі. Саме тому ним потрібно користуватись.  

 Windows-1251 (також вживаються назви Win1251, CP1251) — кодування символів, що є стандартним 8-бітним кодуванням для всіх локалізованих українських і російських версій Microsoft Windows, користується досить великою популярністю. Головна відмінність Windows-1251 від UTF-8 – це використовуваний набір символів. У UTF-8 можна представити набагато більше символів, ніж у Windows-1251, адже кодування Windows-1251 однобайтове, а UTF-8 – кодування змінної довжини (послідовність довжиною від одного до шести байт). Для кирилиці, втім, цілком достатньо і меншого, саме тому однобайтові кодування досі так масово застосовуються.  

Проте, саме UTF-8 дозволяє працювати одночасно з декількома мовами, тобто створювати тексти, в яких використовуються символи різних алфавітів і навіть ієрогліфи. З використанням кодування Windows-1251 це неможливо, адже будуть виникати проблеми сумісності у випадку переходу з платформи на платформу. Крім того, UTF-8 у кодуванні файлів вирішує не лише питання інтероперабельності, тобто сумісності, але й позбавляє необхідності використання кількох кодувань для однієї мови як це було раніше для української мови: ISO 8859-5, CP866, KOI8-U.  

Попри те, що формат JSON відносно легко можуть читати та редагувати люди, його варто створювати машинним способом. Крім того, JSON-файли дуже часто експортуються без рядкових відступів з метою економії місця, тому їх може бути не тільки важко прочитати, але й взагалі зрозуміти. 

Зазвичай головними помилками у JSON-файлах є: 

  1. Зайві чи відсутні коми у кінці колекцій чи списку 
  2. Зайві чи відсутні лапки у вашому файлі 
  3. Проблеми з квадратними [] чи фігурними {} дужками 
  4. Загальне недотримання синтаксису 

У таких випадках, JSON-файли можна перевірити за допомогою спеціальних сервісів: JSON Formatter або JSONlint, які допоможуть виправити не лише помилки, але змінити вигляд файлів на більш зрозумілий людині, так званий “pretty JSON”. 

Крім того, дані ресурси підтримують експорт файлів за допомогою URL-адреси, а також зручне редагування файлів. 

Також важливо пам’ятати, що Ваш JSON має бути у кодуванні UTF-8 (вимога стандарту RFC 7159). У іншому випадку це може спотворити символи, зокрема кириличні і користувачі замість даних побачать “биті значення”.