Символьний тип даних

В комп’ютерній і телекомунікаційній термінології символьний тип даних(char) це одиниця інформації, що приблизно відповідає графемі, графемі як символу в алфавіті або як складової в письмовій формі природної мови.

Прикладами символів є букви, цифри, знаки пунктуації та пробіли. Термін також включає керівні символи, які не відповідають символам в мові, але відповідають за обробку тексту в тій чи іншій мові. Як приклад, спеціальні символи, які вказують принтерам та спеціальним програмам як відобразити текст (символ переходу на новий рядок чи символ табуляції).

Символи, як правило об'єднують в рядки.

Кодування символів

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

Термінологія

Історично склалося так, що термін символ широко використовувався професіоналами для позначення закодованого символу в різних мовах програмування чи API. Термін гліф використовувався для опису зовнішнього вигляду символу. У багатьох комп’ютерних шрифтах всі гліфи проіндексовані відповідно до символу, який вони позначають.

З появою і широким поширенням прийнятих в Unicode спеціальних символьних наборів, символ став частіше розглядатися як одиниця інформації.  Міжнародний стандарт ISO/IEC 10646 (Unicode) визначає символ як "член набору елементів, які використовуються для організації, управління або подання даних". Визначення Unicode доповнюється пояснювальними записками, що дозволяє читачу впізнавати символи, графеми і гліфи, серед інших речей.

Наприклад, буква івриту Алеф ("א") часто використовується математиками для позначення певних видів нескінченності, але вона також використовується і в звичайному єврейському тексті. В Unicode ці два варіанти використання вважаються як два різних символи і мають два різних числові ідентифікатори, хоча вони виглядають однаково. Або ж навпаки, китайська логограма для позначення води ("水") може мати дещо інший вигляд в японських текстах, але в Unicode це вважається за один і той самий символ.

Стандарт Unicode також відрізняє абстрактні символи від закодованих чи розкодованих, які були в парі з числовими кодами, що полегшує їх подання на комп'ютерах.

Об'єднуючий символ

В Unicode також розглядаються об'єднуючі символи. Наприклад,  в Unicode існує спеціальний символ трема, яка додає дві точки над символом.  Це дозволяє отримати символ " ї " двома способами: задавши зразу символ "ї", або задавши його як суму двох символів (U+0069 LATIN SMALL LETTER I + U+0308 COMBINING DIAERESIS).

Обидва вважаються канонічно еквівалентними, відповідно до стандартів Unicode.

char

Char в мові програмування С, є вбудованим типом розміром в 1 байт, розмір якого визначається щоб бути достатньо великим, щоб містити будь-який символ передбачений кодуванням UTF-8. Це задає мінімальний розмір у 8 біт, а саме число бітів можна дізнатись використовуючи макрос  CHAR_BIT . Зазвичай використовується 8 біт, проте стандарт POSIX вимагає щоб розмір був у 8 бітів.

Відколи  Unicode почав вимагати хоча б 21 біт для зберігання одного коду, стало неможливо вмістити один символ в одному char, тоді почали використовувати кодування зі змінною довжиною UTF-8. На жаль, через факт що символ історично зберігається в 1 байті ці терміни стали фактично взаємозамінні в більшості документацій. Тому часто виникали деякі неточності  коли використовувалися багатобайтові кодування, такі як UTF-8, що призвело до неефективних  і неправильних реалізацій функцій обробки рядків. Сучасна POSIX документація намагається виправити це, визначаючи символ, як послідовність з одного чи більше байтів, що представляє один графічний символ або код управління, і пробує використовувати байт коли посилається на символьні дані.  Однак вона визначає масив символів як масив елементів типу char.

Символи з Unicode також можна зберігати в рядках, що складаються з кодових блоків які більші за char. їх називають широкими символами в  мові С це тип wchar_t. На деяких платформах цей тип визначають як 16-бітний, на інших як 32-бітний, в останніх версіях ще додали char16_t, char32_t.

В інших мовах програмування також використовується тип char. Деякі, такі як С++ використовують 8 біт як і в С, а інші мови, такі як Java, використовують 16 бітів для char, щоб використовувати кодування  UTF-16.

Буквені символи

Буквений символ має особливе значення в деяких аспектах обчислень.Такі символи згідно з ASCII, як правило, означають букву алфавіту AZ (верхній або нижній регістр), цифри від 0 до 9, і підкреслення.

Якщо брати до уваги символи “$” або “|” вони не утворюють слова, а символи 'é' (з французької мови )  або "я" (з української мови) чи “ά” (з грецької), використовується наприклад в таких словах, як fédération, Αγορά або Яблуко.

Див. також

Зовнішні посилання