Caracter (informatică)

De la Wikipedia, enciclopedia liberă

În terminologia telecomunicațiilor prin calculatoare și mașini, un caracter este o unitate de informație care corespunde aproximativ unui grafem, unei unități grafemice sau unui simbol, ca cele dintr-un alfabet sau silabar, în forma scrisă a unui limbaj natural.

Exemple de caractere includ litere, cifre, semne de punctuație comune (cum ar fi „.” Sau „-”) și spațiul. Conceptul include, de asemenea, caractere de control, care nu corespund simbolurilor vizibile, ci mai degrabă reprezintă instrucțiuni de formatare sau procesare a textului. Exemple de caractere de control includ returul de car sau tasta tabulator (Tab), precum și instrucțiuni pentru imprimante sau alte dispozitive care afișează sau prelucrează text în alt mod.

Caracterele se combină de obicei în șiruri de caractere.

Istoric, termenul de caracter a fost folosit de asemenea pentru a denumi un număr specific de biți contigui. În timp ce un „caracter” face referire cel mai frecvent la 8 biți (un octet), alte definiții, cum ar fi de 4 sau 6 biți au fost utilizate în trecut.

Codificare[modificare | modificare sursă]

Calculatoarele și echipamentele de comunicare reprezintă caracterele folosind un sistem de codificare care atribuie fiecărui caracter o cheie – de obicei, un număr întreg (adică o secvență de cifre) – care pot fi stocate sau transmise printr-o rețea. Două exemple de codificări des întâlnite sunt ASCII și codificarea UTF-8 de la Unicode. În timp ce majoritatea codificărilor de caractere asociază fiecare caracter cu un număr și/sau o secvență de biți, codul Morse reprezintă în schimb caractere folosind o serie de impulsuri electrice de lungime variabilă.

Terminologie[modificare | modificare sursă]

Istoric, termenul de „caracter” a fost utilizat pe scară largă de către cei din industria informaticii și telecomunicațiilor pentru a se referi la un „caracter codificat”, adesea așa cum este definit de limbajul de programare sau de un API. De asemenea, „set de caractere” a fost utilizat pentru a face referire la un repertoriu specific de caractere care au fost asociate unor secvențe specifice de biți sau coduri numerice. Termenul „glifă” este folosit pentru a descrie aspectul vizual particular al unui caracter. Multe fonturi de calculator constau din glife care sunt indexate cu codul numeric specific al caracterului respectiv.

Odată cu apariția și acceptarea pe scară largă a Unicode, caracterele au început să fie privite ca unități de informație în sine, independente de orice manifestare vizuală particulară. Standardul internațional ISO/IEC 10646 (Unicode) definește caracterul sau caracterul abstract ca „un membru al unei mulțimi de elemente utilizat pentru organizarea, controlul sau reprezentarea datelor”. Definiția Unicode completează acest lucru cu note explicative care încurajează cititorul să diferențieze între caractere, grafeme și glife, printre altele. O astfel de diferențiere este o parte mică a temei mai largi a separării prezentării de conținutul propriu-zis.

De exemplu, litera ebraică aleph („א”) este adesea folosită de matematicieni pentru a denumi anumite tipuri de infinit, dar este folosită și în textele ebraice obișnuit. În Unicode, aceste două utilizări sunt considerate a fi caractere diferite și au două identificatoare numerice Unicode diferite („puncte de cod”), deși pot fi redate identic. În schimb, logograma chinezească pentru apă („水”) poate avea un aspect ușor diferit în textele japoneze decât în textele chineze, iar fonturile specifice pentru fiecare limbă pot reflecta acest lucru. Dar, totuși, în Unicode, ele sunt considerate același caracter și au același punct de cod.

Standardul Unicode diferențiază, de asemenea, între aceste caractere abstracte și caracterele codificate care au fost asociate cu coduri numerice care facilitează reprezentarea lor în calculatoare.

Caractere pentru combinare[modificare | modificare sursă]

Caracterele pentru combinare sunt de asemenea acceptate de Unicode. De exemplu, Unicode alocă un punct de cod fiecăruia dintre următoarele:

  • litera simplă „i” (punct de cod U+0069),
  • trema pentru combinare (U+0308) și
  • litera „ï” cu tremă (U+00EF).

Acest lucru face posibilă codificarea caracterului „ï” fie ca el în sine (U+00EF LATIN SMALL LETTER I WITH DIAERESIS), fie ca o combinație a caracterului „i” cu trema pentru combinare: (U+0069 LATIN SMALL LETTER I și U+0308 COMBINING DIAERESIS), ambele fiind redate ca „ï”.

Acestea sunt considerate canonic echivalente de standardul Unicode.

char[modificare | modificare sursă]

Un char în limbajul de programare C este un tip de date cu dimensiunea de exact un octet, care, la rândul său, este definit ca fiind suficient de mare pentru a conține orice membru al „mulțimii de caractere pentru execuția de bază”. Numărul exact de biți poate fi verificat prin intermediul macro-ului CHAR_BIT. De departe, dimensiunea cea mai obișnuită este de 8 biți, iar standardul POSIX cere ca acesta să fie de 8 biți. În cele mai noi standarde C, char trebuie să conțină unități de cod UTF-8 care necesită o dimensiune minimă de 8 biți.

Un punct de cod Unicode necesită 21 biți. Acesta nu se va încadra într-un char pe majoritatea sistemelor, astfel încât mai multe unități char trebuie utilizate pentru unele caractere, ca în codificarea cu lungime variabilă UTF-8, unde fiecare punct de cod ia între 1 și 4 octeți. Mai mult, un „caracter” poate necesita mai mult de un punct de cod (de exemplu, atunci când se folosesc caractere de combinare), în funcție de ceea ce se înțelege prin cuvântul „caracter”.

Faptul că un caracter era păstrat în trecut într-un singur octet a dus la utilizarea celor doi termeni („char” și „caracter”) interschimbabil în majoritatea documentațiilor. Acest lucru face adesea ca documentația să fie derutantă sau înșelătoare atunci când se utilizează codificări multioctet, cum ar fi UTF-8, și a dus la implementări ineficiente și incorecte ale funcțiilor de manipulare a șirurilor de caractere (cum ar fi calcularea lungimii unui șir ca număr de unități de cod, mai degrabă decât octeți). Documentația modernă POSIX încearcă să remedieze acest lucru, definind „caracterul” ca o secvență de unul sau mai mulți octeți reprezentând un singur simbol grafic sau caracter de control și încearcă să utilizeze „octet” atunci când se referă la datele char. Cu toate acestea, conține în continuare erori, cum ar fi definirea unui șir de char ca un tablou de caractere (mai degrabă decât un tablou de octeți).

Unicode poate fi stocat și în șiruri alcătuite din unități de cod mai mari decât char. Acestea se numesc „caractere largi”. Tipul C inițial a fost numit wchar_t . Din cauza unor platforme care definesc wchar_t ca 16 biți și altele care îl definesc ca 32 biți, versiunile recente au adăugat char16_t, char32_t. Chiar și atunci obiectele stocate ar putea să nu fie caractere, de exemplu, codificarea cu lungimea variabilă UTF-16 este adesea stocată în tablouri de char16_t.

Și alte limbi au un tip de date char. Unele, precum C++, folosesc 8 biți la fel ca C. Altele, cum ar fi Java, folosesc 16 biți pentru char pentru a reprezenta valorile UTF-16.


Referințe[modificare | modificare sursă]

Eroare la citare: Eticheta <ref> cu numele „MW_Definition” definită în <references> nu este utilizată în textul anterior.
Eroare la citare: Eticheta <ref> cu numele „movingtounicode” definită în <references> nu este utilizată în textul anterior.
Eroare la citare: Eticheta <ref> cu numele „ISO14882” definită în <references> nu este utilizată în textul anterior.
Eroare la citare: Eticheta <ref> cu numele „Opengroup_Limits” definită în <references> nu este utilizată în textul anterior.
Eroare la citare: Eticheta <ref> cu numele „Unicode_Glossary” definită în <references> nu este utilizată în textul anterior.
Eroare la citare: Eticheta <ref> cu numele „Opengroup_POSIX_Character” definită în <references> nu este utilizată în textul anterior.
Eroare la citare: Eticheta <ref> cu numele „Opengroup_POSIX_Strlen” definită în <references> nu este utilizată în textul anterior.
Eroare la citare: Eticheta <ref> cu numele „Opengroup_POSIX_CharacterArray” definită în <references> nu este utilizată în textul anterior.
Eroare la citare: Eticheta <ref> cu numele „Goyvaerts_Classes” definită în <references> nu este utilizată în textul anterior.
Eroare la citare: Eticheta <ref> cu numele „Intel_1973_MCS-4” definită în <references> nu este utilizată în textul anterior.
Eroare la citare: Eticheta <ref> cu numele „Dreyfus_1958_Gamma60” definită în <references> nu este utilizată în textul anterior.

Eroare la citare: Eticheta <ref> cu numele „Buchholz_1962” definită în <references> nu este utilizată în textul anterior.

Legături externe[modificare | modificare sursă]