Символьний тип даних
В комп’ютерній і телекомунікаційній термінології символьний тип даних(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, Αγορά або Яблуко.
Зовнішні посилання
- Characters: A Brief Introduction by The Linux Information Project (LINFO)
- ISO/IEC TR 15285:1998 summarizes the ISO/IEC's character model, focusing on terminology definitions and differentiating between characters and glyphs