Si të konfiguroni telefonat inteligjentë dhe PC. Portali informativ

Kodimi Ascii. Sistemet e kodimit të tekstit

Bashkësia e karaktereve me të cilat shkruhet teksti quhet alfabeti.

Numri i karaktereve në alfabet është i tij pushtetin.

Formula për përcaktimin e sasisë së informacionit: N = 2 b,

ku N është kardinaliteti i alfabetit (numri i karaktereve),

b - numri i biteve (pesha informative e karakterit).

Alfabeti me një kapacitet prej 256 karakteresh mund të strehojë pothuajse të gjitha karakteret e nevojshme. Ky alfabet quhet mjaftueshëm.

Sepse 256 = 2 8, atëherë pesha e 1 karakteri është 8 bit.

Njësia 8-bitëshe u emërua 1 bajt:

1 bajt = 8 bit.

Kodi binar i çdo karakteri në tekstin kompjuterik merr 1 bajt memorie.

Si paraqitet informacioni i tekstit në memorien e kompjuterit?

Lehtësia e kodimit të karaktereve me bajt është e dukshme, pasi një bajt është pjesa më e vogël e adresueshme e memories dhe, për rrjedhojë, procesori mund të aksesojë çdo karakter veç e veç, duke kryer përpunimin e tekstit. Nga ana tjetër, 256 karaktere është një numër mjaft i mjaftueshëm për të përfaqësuar një shumëllojshmëri të gjerë të informacionit të karaktereve.

Tani lind pyetja, çfarë lloj kodi binar tetë-bit të lidhet me secilin karakter.

Është e qartë se kjo është një çështje e kushtëzuar, ju mund të dilni me shumë metoda kodimi.

Të gjithë karakteret e alfabetit të kompjuterit numërohen nga 0 në 255. Çdo numër korrespondon me një tetëshifror kodi binar nga 00000000 në 11111111. Ky kod është vetëm numri rendor i karakterit në sistemi binar duke llogaritur.

Tabela në të cilën të gjithë karakteret e alfabetit të kompjuterit janë caktuar numra serialë quhet tabela e kodimit.

Për tipe te ndryshme Kompjuterët përdorin tabela të ndryshme kodimi.

Standardi ndërkombëtar për PC është bërë tabela ASCII(lexo asci) (amerikan kod standard për shkëmbimin e informacionit).

Tabela ASCII është e ndarë në dy pjesë.

Standardi ndërkombëtar është vetëm gjysma e parë e tabelës, d.m.th. simbolet me numra nga 0 (00000000), deri në 127 (01111111).

Struktura e tabelës koduese ASCII

Numër serik

Kodi

Simboli

0 - 31

00000000 - 00011111

Simbolet me numra nga 0 në 31 zakonisht quhen karaktere kontrolli.
Funksioni i tyre është të kontrollojnë procesin e shfaqjes së tekstit në ekran ose printimin, ushqyerjen sinjal zanor, shënimi i tekstit, etj.

32 - 127

00100000 - 01111111

Pjesa standarde e tabelës (anglisht). Këtu përfshihen shkronjat e vogla dhe të mëdha Alfabeti latin, shifra dhjetore, shenja pikësimi, të gjitha llojet e kllapave, simbole tregtare dhe të tjera.
Karakteri 32 është një hapësirë, d.m.th. pozicion bosh në tekst.
Të gjitha të tjerat pasqyrohen në shenja të caktuara.

128 - 255

10000000 - 11111111

Pjesa alternative e tabelës (rusisht).
Pjesa e dytë tabela e kodeve ASCII, i quajtur faqe kodi (128 kode nga 10000000 në 11111111), mund të ketë opsione të ndryshme, çdo opsion ka numrin e vet.
Faqja e kodit përdoret kryesisht për të akomoduar alfabete kombëtare të ndryshme nga latinishtja. Në kodimet kombëtare ruse, kjo pjesë e tabelës përmban simbole të alfabetit rus.

Gjysma e parë e tabelës ASCII


Unë tërheq vëmendjen tuaj për faktin se në tabelën e kodimit, shkronjat (të mëdha dhe të vogla) janë renditur sipas rendit alfabetik, dhe numrat janë renditur në rendin rritës të vlerave. Ky respektim i rendit leksikografik në renditjen e karaktereve quhet parimi i kodimit sekuencial të alfabetit.

Për shkronjat e alfabetit rus, respektohet edhe parimi i kodimit sekuencial.

Gjysma e dytë e tabelës ASCII


Fatkeqësisht, aktualisht ekzistojnë pesë kodime të ndryshme cirilike (KOI8-R, Windows. MS-DOS, Macintosh dhe ISO). Për shkak të kësaj, shpesh lindin probleme me transferimin e tekstit rus nga një kompjuter në tjetrin, nga një sistemi softuerik tek një tjetër.

Kronologjikisht, një nga standardet e para për kodimin e shkronjave ruse në kompjuter ishte KOI8 ("Kodi i shkëmbimit të informacionit, 8-bit"). Ky kodim u përdor përsëri në vitet '70 në kompjuterët e serisë kompjuterike ES, dhe nga mesi i viteve '80 filloi të përdoret në versionet e para të rusifikuara të sistemit operativ UNIX.

Që nga fillimi i viteve '90, koha e dominimit të sistemit operativ MS DOS, kodimi CP866 mbetet ("CP" do të thotë "Faqja e kodit").

Kompjuterët Apple që funksionojnë nën kontrollin e sallës së operacionit Sistemet Mac OS, përdorni kodimin e tyre Mac.

Për më tepër, Organizata Ndërkombëtare për Standardizim (Organizata Ndërkombëtare e Standardeve, ISO) miratoi një kodim tjetër të quajtur ISO 8859-5 si standard për gjuhën ruse.

Më e zakonshme është aktualisht Kodimi i Microsoft Windows, shkurtuar si CP1251.

Që nga fundi i viteve '90, problemi i standardizimit të kodimit të karaktereve është zgjidhur me futjen e një standardi të ri ndërkombëtar të quajtur Unicode... Ky është një kodim 16-bit d.m.th. cakton 2 bajt memorie për çdo karakter. Sigurisht, kjo dyfishon sasinë e memories së përdorur. Por nga ana tjetër, një tabelë e tillë kodesh lejon përfshirjen deri në 65536 karaktere. Specifikimi i plotë Standardi Unicode përfshin të gjitha alfabetet ekzistuese, të zhdukura dhe të krijuara artificialisht të botës, si dhe shumë simbole matematikore, muzikore, kimike dhe të tjera.

Le të përpiqemi të përdorim një tabelë ASCII për të imagjinuar se si do të duken fjalët në kujtesën e kompjuterit.

Paraqitja e brendshme e fjalëve në kujtesën e kompjuterit

Ndonjëherë ndodh që një tekst i përbërë nga shkronja të alfabetit rus, i marrë nga një kompjuter tjetër, nuk mund të lexohet - një lloj "korrizi" është i dukshëm në ekranin e monitorit. Kjo për faktin se kompjuterët përdorin kodime të ndryshme të karaktereve të gjuhës ruse.

Kodimi i tekstit

Kodimi i tekstit është krijimi i një tabele korrespondence midis karakterit të koduar dhe kombinimit të gjendjes së biteve, domethënë, procesi i kodimit konsiston në faktin se çdo karakter është caktuar kod unik... Aktualisht, ekzistojnë sisteme të ndryshme kodimi, ndryshimi kryesor midis tyre është numri i biteve të kërkuara për të koduar një karakter.

ASCII (Amerikane Kodi standard për shkëmbimin e informacionit): për të koduar një karakter, përdoret sasia e informacionit = 7 bit. Nëse i konsiderojmë simbolet si ngjarje të mundshme (shih Leksionin 1), atëherë mund të llogarisim numrin e simboleve që mund të kodohen:

2*26-letra

32-personazhe të ndryshëm

34-karaktere shërbimi

128 karaktere

Kështu, numri i karaktereve të koduara është i kufizuar, kështu që është e pamundur të kodohen shkronjat e alfabetit rus në sistemin e kodimit shtatë-bit. Detyra u ngrit për të përshkruar njëkohësisht karaktere ruse dhe latine. Mënyrat për të zgjidhur këtë problem janë transliterimi dhe zgjerimi i kodimit.

Sistemet e kodimit me tetë bit:

Nëse biti më domethënës i kodit është 0, atëherë sistemi i kodimit përkon me ASCII, nëse biti më domethënës është –1, atëherë futen faqet e kodit shtesë.

Në Rusi, një nga sistemet e tilla u krijua KOI-8, disavantazhi i tij është se shkronjat ruse nuk janë renditur sipas alfabetit.Përveç kësaj, ekzistojnë CP-866, CP-1251, ANSI, të cilat përdoren në sistemin operativ Windows.

Faqe të mëdha kodesh:

Duhen 16 bit për të koduar një karakter

Natyrisht, me një sistem të tillë kodimi, nuk ka asnjë problem për pamundësinë e kodimit të një karakteri të veçantë, pasi 65535 më shumë se mbulon shumëllojshmërinë e karaktereve të përdorura, por UNICODE ka një pengesë tjetër: kur përkthen tekste nga ASCII në UNICODE, madhësia e kompjuterit. teksti rritet ndjeshëm. Në këtë drejtim, një klasë tjetër e sistemeve të kodimit është zhvilluar duke përdorur numër i ndryshueshëm bit për të koduar karakteret.

Nëse pjesa më e rëndësishme e kodit është zero(bit8 = 0), atëherë sistemi i kodimit është i njëjtë me ASCII, ku secili nga 128 karakteret e para është i koduar në një bajt.
Nëse i moshuar është e barabartë me një(bit8 = 1, bit 7 = 0), atëherë 16384 karakteret e radhës janë të koduara në mënyrë të ngjashme me UNICODE, domethënë dy bajt përdoren për të koduar çdo karakter. Karakteret e mbetura (65535-128-16384 = 49023) janë të koduara në tre bajt.

Shembull: merrni parasysh sa informacion mbart një varg karakteresh "Informacion × - × Informacion"
në sisteme të ndryshme kodimi. Në rastin e CP1251, çdo karakter është i koduar me një bajt Þ sasi informacioni: 24 * 1 = 24 bajt. Në UNICODE, çdo karakter është i koduar me dy bajt Þ sasi informacioni: 24 * 2 = 48 bajt. Në UTF-8, kodimi i shkronjave latine, hapësirave dhe vizave kërkon një bajt për çdo karakter, dhe çdo karakter i fjalës "Informacion" është i koduar me dy bajtë Þ sasia e informacionit: 14 * 1 + 10 * 2 = 34 byte.


Nga njëra anë, teksti i kompjuterit është alfabetik, sipas të cilit teksti përfaqësohet si një varg karakteresh ( qasje alfabetike). Një qasje tjetër është që teksti kompjuterik konsiderohet tashmë si një strukturë komplekse, e përbërë nga shumë nga të gjitha vargjet e karaktereve.

t: (1, 2, 3 ... k) është një nga zinxhirët e tillë me gjatësi k.

Kjo qasje bën të mundur kuptimin e algoritmit të transformimit të tekstit, i cili kryhet sipas parimit të shfaqjes funksionale, domethënë, një zinxhir teksti i përfshirë në zonën e përkufizimit të këtij algoritmi shoqërohet me një zinxhir tjetër, i cili është rezultati. i transformimit: t 1 ®t 2. Në këtë rast, domeni i përkufizimit të funksionit (algoritmit) do të jetë gjuha.

Gramatika e gjuhës këto janë rregullat që gjenerojnë të gjitha zinxhirët në gjuhë. Simboli i veçantë alfabeti është një shprehje e rregullt. Gramatikat e shprehjeve të rregullta shkruhen si një program që gjeneron një varg karakteresh. Emërimi shprehjet e rregullta- vendos grupin e vargjeve që përbëjnë gjuhën.

Simbolet e mbivendosjes

Karakteri BS (backspace) lejon printerin të mbishkruajë një karakter. Në ASCII, ishte parashikuar shtimi i diakritikëve në shkronja në këtë mënyrë, për shembull:

  • a BS "→ á
  • a BS `→ à
  • a BS ^ → â
  • o BS / → ø
  • c BS, → ç
  • n BS ~ → ñ

shënim: në shkronjat e vjetra, apostrofi "ishte vizatuar me një pjerrësi në të majtë, dhe tilda ~ u zhvendos lart, në mënyrë që ato të përshtaten vetëm me rolin e akute dhe tildës sipër.

Nëse i njëjti simbol mbivendoset në një simbol, atëherë arrihet efekti të guximshme, dhe nëse një nënvizim mbivendoset mbi një karakter, atëherë fitohet teksti i nënvizuar.

  • a BS a → a
  • a BS _ → a

shënim: kjo përdoret për shembull në sistemi i ndihmës njeri.

Variantet kombëtare të ASCII

Standardi ISO 646 (ECMA-6) ofron mundësinë e vendosjes së karaktereve kombëtare në vend @ [ \ ] ^ ` { | } ~ ... Përveç kësaj, në vend # mund të akomodohen £ , dhe në vend $ - ¤ ... Ky sistem është i përshtatshëm për gjuhët evropiane ku nevojiten vetëm disa karaktere shtesë. Versioni ASCII pa karaktere kombëtare quhet US-ASCII, ose "Versioni i referencës ndërkombëtare".

Më pas, doli të ishte më i përshtatshëm përdorimi i kodimeve 8-bit (faqet e kodit), ku gjysma e poshtme e tabelës së kodit (0-127) është e zënë nga karakteret US-ASCII, dhe pjesa e sipërme (128-255) - karaktere shtesë, duke përfshirë një grup simbolesh kombëtare. Kështu, gjysma e sipërme e tabelës ASCII, përpara miratimit të gjerë të Unicode, u përdor në mënyrë aktive për të përfaqësuar karaktere të lokalizuara, shkronja të gjuhës lokale. Mungesa standard uniform vendosja e karaktereve cirilike në tabelën ASCII shkaktoi shumë probleme me kodimet (KOI-8, Windows-1251 dhe të tjerët). Gjuhët e tjera me shkrim jo-latin gjithashtu vuanin nga prania e disa kodimeve të ndryshme.

.0 .1 .2 .3 .4 .5 .6 .7 .8 .9 .A .B .C .D .E .F
0. NUL SOM EOA MVZ EQT WRU RU ZILE BKSP Ht LF VT FF CR KËSHTU QË SI
1. DC 0 DC 1 DC 2 DC 3 DC 4 GABIM SINkronizimi LEM S 0 S 1 S 2 S 3 S 4 S 5 S 6 S 7
2.
3.
4. BLANK ! " # $ % & " ( ) * + , - . /
5. 0 1 2 3 4 5 6 7 8 9 : ; < = > ?
6.
7.
8.
9.
A. @ A B C D E F G H I J K L M N O
B. P P R S T U V W X Y Z [ \ ]
C.
D.
E. a b c d e f g h i j k l m n o
F. fq q r s t u v w x y z ESC DEL

Në ata kompjuterë ku njësia minimale e adresueshme e memories ishte një fjalë 36-bit, fillimisht u përdorën karaktere 6-bit (1 fjalë = 6 karaktere). Pas kalimit në ASCII në kompjuterë të tillë, ata filluan të vendosnin ose 5 karaktere shtatë-bitësh në një fjalë (1 bit mbeti i tepërt), ose 4 karaktere nëntë-bitësh.

Kodet ASCII përdoren gjithashtu për të identifikuar tastin e shtypur gjatë programimit. Për një tastierë standarde QWERTY, tabela e kodeve duket si kjo:

[Kodimi 8-bit: ASCII, KOI-8R dhe CP1251] Tabelat e para të grupeve të karaktereve të krijuara në SHBA nuk përdorën bitin e tetë në një bajt. Teksti u paraqit si një sekuencë bajtash, por biti i tetë nuk u mor parasysh (është përdorur për qëllime shërbimi).

Standardi i pranuar përgjithësisht është bërë tabela ASCII (Standardi Amerikan Kodi për shkëmbimin e informacionit). 32 karakteret e para ASCII (00 deri në 1F) u përdorën për karaktere që nuk mund të printohen. Ato ishin krijuar për të kontrolluar një pajisje printimi dhe të ngjashme. Pjesa tjetër - nga 20 në 7 F - janë karaktere normale (të printueshme).

Tabela 1 - Kodimi ASCII

dhjetorHekstetorCharPërshkrim
0 0 000 i pavlefshëm
1 1 001 fillimi i titullit
2 2 002 fillimi i tekstit
3 3 003 fundi i tekstit
4 4 004 fundi i transmetimit
5 5 005 hetim
6 6 006 pranoj
7 7 007 zile
8 8 010 backspace
9 9 011 skedë horizontale
10 A 012 linjë e re
11 B 013 skedë vertikale
12 C 014 faqe e re
13 D 015 kthim ngarkese
14 E 016 zhvendosja jashtë
15 F 017 zhvendosje brenda
16 10 020 ikja e lidhjes së të dhënave
17 11 021 kontrolli i pajisjes 1
18 12 022 kontrolli i pajisjes 2
19 13 023 kontrolli i pajisjes 3
20 14 024 kontrolli i pajisjes 4
21 15 025 pranimi negativ
22 16 026 boshe sinkron
23 17 027 fundi i trans. bllokoj
24 18 030 anuloni
25 19 031 fundi i mesëm
26 1A 032 zëvendësues
27 1B 033 arratisje
28 1C 034 ndarës i skedarëve
29 1D 035 ndarës grupi
30 1E 036 ndarës rekord
31 1F 037 ndarës njësi
32 20 040 hapësirë
33 21 041 !
34 22 042 "
35 23 043 #
36 24 044 $
37 25 045 %
38 26 046 &
39 27 047 "
40 28 050 (
41 29 051 )
42 2A 052 *
43 2B 053 +
44 2C 054 ,
45 2D 055 -
46 2E 056 .
47 2F 057 /
48 30 060 0
49 31 061 1
50 32 062 2
51 33 063 3
52 34 064 4
53 35 065 5
54 36 066 6
55 37 067 7
56 38 070 8
57 39 071 9
58 3A 072 :
59 3B 073 ;
60 3C 074 <
61 3D 075 =
62 3E 076 >
63 3F 077 ?
dhjetorHekstetorChar
64 40 100 @
65 41 101 A
66 42 102 B
67 43 103 C
68 44 104 D
69 45 105 E
70 46 106 F
71 47 107 G
72 48 110 H
73 49 111 I
74 4A 112 J
75 4B 113 K
76 4C 114 L
77 4D 115 M
78 4E 116 N
79 4F 117 O
80 50 120 P
81 51 121 P
82 52 122 R
83 53 123 S
84 54 124 T
85 55 125 U
86 56 126 V
87 57 127 W
88 58 130 X
89 59 131 Y
90 5A 132 Z
91 5B 133 [
92 5C 134 \
93 5D 135 ]
94 5E 136 ^
95 5F 137 _
96 60 140 `
97 61 141 a
98 62 142 b
99 63 143 c
100 64 144 d
101 65 145 e
102 66 146 f
103 67 147 g
104 68 150 h
105 69 151 i
106 6A 152 j
107 6B 153 k
108 6C 154 l
109 6D 155 m
110 6E 156 n
111 6F 157 o
112 70 160 fq
113 71 161 q
114 72 162 r
115 73 163 s
116 74 164 t
117 75 165 u
118 76 166 v
119 77 167 w
120 78 170 x
121 79 171 y
122 7A 172 z
123 7B 173 {
124 7C 174 |
125 7D 175 }
126 7E 176 ~
127 7F 177 DEL

Siç mund ta shihni lehtësisht, ky kodim përmban vetëm shkronja latine dhe ato që përdoren në anglisht. Ekzistojnë gjithashtu simbole aritmetike dhe të tjera shërbimi. Por nuk ka shkronja ruse, madje as shkronja të veçanta latine për gjermanishten apo frëngjishten. Kjo është e lehtë për t'u shpjeguar - kodimi u zhvillua posaçërisht si një standard amerikan. Kur kompjuterët filluan të përdoren në të gjithë botën, u bë i nevojshëm kodimi i simboleve të tjera.

Për këtë, u vendos që të përdoret biti i tetë në çdo bajt. Kështu, 128 vlera të tjera ishin në dispozicion (nga 80 në FF), të cilat mund të përdoren për të koduar karakteret. E para nga tabelat me tetë bit është "ASCII e zgjeruar" ( ASCII i zgjeruar) - përfshinte opsione të ndryshme karaktere latine përdoret në disa gjuhë të Evropës Perëndimore. Ai gjithashtu përmbante simbole të tjera shtesë, duke përfshirë pseudografikë.

Karakteret pseudografike lejojnë, vetëm duke shfaqur personazhet e tekstit, ofrojnë një pamje të grafikës. Me ndihmën e pseudo-grafikës, për shembull, një program për kontroll Skedarët FAR Menaxheri.

Nuk kishte shkronja ruse në tabelën e zgjeruar ASCII. Në Rusi (ish BRSS) dhe në shtetet e tjera, u krijuan kodimet e tyre, të cilat bënë të mundur përfaqësimin e karaktereve specifike "kombëtare" në skedarë teksti 8-bit - shkronja latine të gjuhëve polake dhe çeke, cirilike (përfshirë shkronjat ruse ) dhe alfabete të tjera.

Në të gjitha kodimet që janë bërë të përhapura, 127 karakteret e para (d.m.th., vlerat e bajtit me bitin e tetë të barabartë me 0) përkojnë me ASCII. Kështu, një skedar ASCII funksionon në cilindo nga këto kodime; letra në Anglisht ato përfaqësohen në të njëjtën mënyrë.

Organizimi ISO(Organizata Ndërkombëtare e Standardizimit) miratoi një grup standardesh ISO 8859... Ai përcakton kodimet 8-bit për grupe të ndryshme gjuhët. Pra, ISO 8859-1 është Extended ASCII, një tabelë për Shtetet e Bashkuara dhe Evropën Perëndimore. Dhe ISO 8859-5 është një tabelë për cirilik (përfshirë rusishten).

Megjithatë, për arsye historike, kodimi ISO 8859-5 nuk ka arritur. Në realitet, kodimet e mëposhtme përdoren për gjuhën ruse:

Kodi Faqe 866 ( CP866), i njohur si "DOS", i njohur si "kodimi alternativ GOST". U përdor gjerësisht deri në mesin e viteve '90; tani përdoret në një masë të kufizuar. Praktikisht nuk përdoret për shpërndarjen e teksteve në internet.
- KOI-8. Zhvilluar në vitet '70 dhe '80. Është një standard i pranuar përgjithësisht për transmetimin e mesazheve postare në internetin rus. Gjithashtu përdoret gjerësisht në sistemet operative Familjet Unix, duke përfshirë Linux. Versioni KOI-8, i krijuar për gjuhën ruse, quhet KOI-8R; ka versione për gjuhë të tjera cirilike (për shembull, KOI8-U është një opsion për gjuhën ukrainase).
- Kodi Faqe 1251, CP1251, Windows-1251. Zhvilluar nga nga Microsoft për të mbështetur gjuhën ruse në Windows.

Avantazhi kryesor i CP866 ishte ruajtja e karaktereve pseudografike në të njëjtat vende si në Extended ASCII; prandaj i huaj programe tekstuale për shembull komandanti i famshëm Norton. Në ditët e sotme CP866 përdoret për programet Windows që ekzekutohen në dritare me tekst ose në modalitetin e tekstit në ekran të plotë, duke përfshirë "FAR Manager".

Tekstet e CP866 vitet e fundit janë mjaft të rralla (por përdoret për të koduar emrat e skedarëve rusë në Windows). Prandaj, ne do të ndalemi më në detaje në dy kodime të tjera - KOI-8R dhe CP1251.



Siç mund ta shihni, në tabelën e kodimit CP1251, shkronjat ruse janë renditur sipas rendit alfabetik (me përjashtim të shkronjës E). Falë këtij lokacioni programet kompjuterikeështë shumë e lehtë të renditet sipas alfabetit.

Por në KOI-8R, renditja e shkronjave ruse duket të jetë e rastësishme. Por në fakt nuk është kështu.

Shumë programe të vjetra humbën bitin e 8-të gjatë përpunimit ose transmetimit të tekstit. (Tani programe të tilla praktikisht janë "shuar", por në fund të viteve '80 - fillimi i viteve '90 ato ishin të përhapura). Për të marrë një vlerë 7-bitësh nga një vlerë 8-bitësh, zbritni 8 nga shifra më e rëndësishme; për shembull E1 bëhet 61.

Tani krahasoni KOI-8R me Tabela ASCII(Tabela 1). Do të zbuloni se shkronjat ruse janë të lidhura qartë me ato latine. Nëse biti i tetë zhduket, shkronjat e vogla ruse kthehen në shkronja të mëdha latine dhe shkronjat e mëdha ruse kthehen në shkronja të vogla latine. Pra, E1 në KOI-8 është rusisht "A", ndërsa 61 në ASCII është latinisht "a".

Pra, KOI-8 ju lejon të ruani lexueshmërinë e tekstit rus duke humbur bitin e 8-të. "Përshëndetje të gjithëve" bëhet "pRIWET WSEM".

V Kohët e fundit dhe renditja e alfabetit renditja e karaktereve në tabelën e kodimit dhe lexueshmëria me humbjen e bitit të 8-të kanë humbur rëndësinë e tyre vendimtare. Biti i tetë në kompjuterë modernë nuk humbet gjatë transmetimit ose përpunimit. Renditja sipas rendit alfabetik bazohet në kodim, dhe jo vetëm duke krahasuar kodet. (Nga rruga, kodet CP1251 nuk janë plotësisht alfabetike - shkronja E nuk është në vendin e saj).

Për shkak të faktit se ekzistojnë dy kodime të zakonshme, kur punoni me internetin (mail, shfletimi i faqeve në internet), ndonjëherë mund të shihni një grup të pakuptimtë shkronjash në vend të tekstit rus. Për shembull, "Unë jam SBUFEMHEL". Këto janë vetëm fjalët "me respekt"; por ato ishin të koduara në kodimin CP1251, dhe kompjuteri deshifroi tekstin sipas tabelës KOI-8. Nëse të njëjtat fjalë ishin, përkundrazi, të koduara në KOI-8, dhe kompjuteri deshifroi tekstin sipas tabelës CP1251, rezultati do të jetë "У ХЧБЦЕОЙЕН".

Ndonjëherë ndodh që kompjuteri të deshifrojë fare shkronjat në gjuhën ruse sipas një tabele që nuk është menduar për gjuhën ruse. Pastaj, në vend të shkronjave ruse, shfaqet një grup simbolesh të pakuptimta (për shembull, shkronja latine të gjuhëve të Evropës Lindore); ata shpesh quhen "crocozyabras".

Në shumicën e rasteve programe moderne përballen me përcaktimin e kodimeve të dokumenteve të internetit ( emailet dhe faqet e internetit) vetë. Por ndonjëherë ata "shkojnë keq", dhe më pas mund të shihni sekuenca të çuditshme të shkronjave ruse ose "krokozyabra". Si rregull, për të shfaqur tekstin real në ekran, mjafton të zgjidhni kodimin manualisht në menunë e programit.

Për artikullin, u përdor informacioni nga faqja http://open-office.edusite.ru/TextProcessor/p5aa1.html.

Materiali i marrë nga faqja:

Kodimi i tekstit: ASCII dhe Unicode (UTF-16)

Një person e percepton lehtësisht tekstin. Truri ynë përpunon vëllime të mëdha tekstesh çdo ditë. Ndryshe nga ne, procesori i kompjuterit mund të punojë vetëm me numra. Prandaj, të gjitha të dhënat e tekstit në kujtesën e kompjuterit përfaqësohen me numra. Por më parë diskutim i detajuar Në këtë pikë, le të kujtojmë se si është organizuar memoria e kompjuterit.

Kujtesa e kompjuterit është një sekuencë bitash. Një bit është njësia më e vogël e informacionit që mund të ruajë dy vlera: zero ose një. ato. të gjitha të dhënat që mund të prodhojë një kompjuter (numra, tekst, audio, video) janë një sekuencë zero dhe njësh.

Pjesa është shumë e vogël. Prandaj, bitet bashkohen në bajt. Ka tetë bit në një bajt. Çdo bajt ka adresën e vet. Është bajt që është njësia minimale që procesori mund t'i qaset - procesori nuk mund të aksesojë bit individualë, vetëm përmes bajteve përkatës. Le të hedhim një vështrim në një pjesë të vogël të memories kompjuterike:

01001000 01000101 01001011 01001011 01001111 00100001

Adresat e bajtit shfaqen në krye, dhe vlerat e ruajtura në këto adresa shfaqen në fund. Në realitet, adresa të tilla nuk ekzistojnë, pasi kompjuterët modernë funksionojnë me hapësira të mëdha adresash. Adresat në kompjuterët modernë shkruhen si kjo: 0x01328921. Adresat shkruhen në format heksadecimal.

Një bajt mund të ruajë 256 vlera - 28 = 256. Gama e vlerave: nga zero në 255 (për numrat e panënshkruar), ose nga -128 në 127 (për numrat e nënshkruar). Heksadecimal vlera maksimale byte - 0xff. Kushtojini vëmendje përdorshmërisë sistemi heksadecimal llogaritja: kërkohen dy shifra për të shkruar çdo vlerë me një bajt. Le të shikojmë vargjet e një numri bajt gjithsej tre sisteme duke llogaritur:

00000000 ... 11111111

Procesori i sheh të gjithë numrat në formë binare, por mund t'i konvertojë në sisteme të tjera numrash, në mënyrë që të jetë e përshtatshme për ne t'i lexojmë ato. Rregullat e konvertimit ndërmjet sisteme të ndryshme llogaritje që diskutuam në mësimet e mëparshme. Sekuenca e bajteve të dhëna më sipër mund të përfaqësohet si më poshtë:

0x48 0x45 0x4b 0x4b 0x4f 0x21 // heksadecimal

Është më i përshtatshëm që një kompjuter të përdorë një formë binare, dhe për ne - heksadecimal, ose dhjetor.

Kodimi ASCII

Për të paraqitur tekstin në numra, çdo shkronjë është caktuar vlerë numerike- të kodojë kuptimet e shkronjave. Caktimi për të gjitha shkronjat vlerë unike, marrim kodimin (bashkësi karakteresh, endodim). Por nuk ka kuptim të përdorni kodimin tuaj - mund ta përdorni vetëm në programin tuaj. Në ky moment kodimi më i përdorur është ASCII.



Fillimisht, një karakter ASCII ishte 7 bit. Por kur bajt 8-bit u përhap (po, kishte bajt madhësive të ndryshme), më pas ASCII është zgjeruar në tetë bit. Kodimi 7-bit është gjysma e madhësisë së kodimit tetë-bit: 27 = 128< 28=256.

Pra, fillimisht kishte 128 vlera në kodimin ASCII: nga 0 në 127 (0x00 në 0x7f). Kjo është e mjaftueshme për të koduar të gjitha shkronjat e alfabetit latin, numrat arabë dhe një sërë karakteresh të tjera.

Kodimi 7-bit ASCII është baza për të gjitha kodimet e zakonshme aktualisht dhe është jashtëzakonisht i rëndësishëm në programim. Prandaj, do të njihemi me vlerat specifike:

0 - zero. Nuk është një numër në tekstin e shfaqur. TE këtë kod asnjë simbol nuk është bashkangjitur. ato. nuk do ta shihni kurrë paraqitjen zero në ekran. Megjithatë, zero është shumë e rëndësishme në programimin dhe ruajtjen e tekstit. Për çfarë përdoret ky kod, do ta zbulojmë më vonë.

32 është një hapësirë.

48 - kodi zero. Kur shohim zero në ekranin e monitorit, në kujtesën e kompjuterit ky simbol përfaqësohet me numrin 48.

57 - nëntë.

65 - shkronja kursive A (alfabeti anglez).

90 - shkronja e madhe Z.

97 - shkronje e vogel a.

122 është një shkronjë e vogël z.

Le të kthehemi te sekuenca e bajtëve të diskutuar më parë dhe të përpiqemi të përputhim vlerën e secilit me një kod ASCII:

01001000 01000101 01001011 01001011 01001111 00100001 // forma binare (binare)

72 69 76 76 79 33 // formë dhjetore

PËRSHËNDETJE! // Personazhet ASCII

Oh, mrekulli! Morëm tekstin "HELLO!"

Kompjuteri sheh vetëm një sekuencë bajtësh, të cilave mund t'u referohet me adresat e tyre. Mund të shohim se si numrat e thjeshtë, dhe tekstin, nëse shikoni këta numra në kodimin ASCII.

Kodimi i zgjeruar ASCII

Me ardhjen e kodimit me tetë bit, alfabetet e tjera ishin gjithashtu në gjendje të kodonin në ASCII. Ka shumë kodime të zgjeruara ASCII - ka versione për shumë alfabete kombëtare. Për më tepër, gjysma e parë e kodimit (vlerat nga zero në 127) është e njëjtë kudo.

Alfabeti rus (cirilik) është i koduar me emrin windows-1251. Një tjetër version i njohur ASCII - Windows-1252 - është një kodim për gjuhët e Evropës Perëndimore (ai kodon shkronja specifike për alfabetin francez dhe gjerman). Nga rruga, teksti që po lexoni tani është i koduar në Windows-1251.

Ne nuk na intereson se si shkronjat ruse (dhe ato angleze gjithashtu) janë të koduara në Windows-1251 - nuk kemi nevojë të dimë kuptime specifike. Nëse është e nevojshme, mund të gjeni listën e plotë vlerat e karaktereve për Windows-1251 në motorët e kërkimit.

Kodimi i numrave në tekst

Në praktikë, nuk keni nevojë të dini kuptimet e koduara të shkronjave. Por në të njëjtën kohë, është e domosdoshme të mbani mend vlerat e koduara të numrave. Në ASCII, numrat kanë kode nga 48 në 57.48 është zero, 49 është një ... 57 është nëntë. Më lejoni t'ju kujtoj se 128 vlerat e para janë të njëjta në të gjitha kodimet, kështu që kodet e numrave janë të njëjtë kudo. Dhe kjo, po ju them, është shumë e lezetshme. Pse duhet të dini kodet e numrave dhe si lidhet kjo me krijimin e lojërave?

Le të themi se në lojën tonë duhet të shfaqim vlerat e njësive të përdoruesve. Brenda, ky është një numër i thjeshtë, i përfaqësuar nga një ndryshore. Por që përdoruesi ta shohë këtë numër, duhet të kthehet në tekst, i cili do të shfaqet në ekran. Prandaj, kur krijoni një lojë, është e domosdoshme të shkruani kodin që konverton numrat në tekst.

Për shembull, merrni parasysh dy vlera: në fillim të lojës, përdoruesi nuk ka njësi, dhe pas një kohe ai ndërtoi pesë.

Së pari, përdoruesi duhet të shfaqë karakterin 0. Për ta bërë këtë, duhet të përdorni vlerën e koduar të këtij karakteri - 48. Më pas përdoruesi duhet të shfaqë karakterin 5, kodi i të cilit është 53. Këtu mund të shihni tipar interesant: kodi i karakterit të shifrës ndryshon nga vlera aktuale me 48. Prandaj, për numrat njëshifrorë (dhe vetëm njëshifrorë), mund të përdorim kodin e mëposhtëm:

int var = GetUnitNumber (); // gjeni numrin e njësive

prodhimi char = var + 48;

Tani mund të shfaqni daljen e ndryshueshme në ekran. Mbetet vetëm një problem për t'u zgjidhur: në situata reale, numrat njëshifrorë përdoren shumë rrallë. Për shembull, në kompaninë e heronjve, një lojtar ka më shumë se 15 njësi nën komandën e tij, në Age of Empires - më shumë se 50. Në lojërat e tjera, situata është e ngjashme. Në revole, mund t'ju duhet të shfaqni numrin e fishekëve dhe shëndetin (vlerat e të cilave janë pothuajse gjithmonë më të mëdha se 9). Sigurisht, kur krijojmë lojën tonë, do të na duhet të shfaqim numra shumëshifrorë. Ne do të shqyrtojmë daljen e numrave shumëshifrorë në mësimin tjetër, por tani do të kthehemi te shqyrtimi i kodimeve.

Encoding Unicode - Unicode

Një bajt mund të ketë vetëm 256 vlera. Kjo do të thotë se 256 karaktere mund të kodohen në ASCII: numra, shkronja, ikona, shenja pikësimi dhe simbole të tjera të ndryshme. Në të njëjtën kohë, ka skripta në të cilat ka shumë më tepër karaktere, për shembull, karaktere kineze ose japoneze.

Për të zgjidhur këtë (dhe disa të tjerë) problem, kodimi Unicode u krijua në fillim të viteve nëntëdhjetë. Fillimisht, të gjithë karakteret unicode ishin dy bajt. Prandaj, 216 = 65536 vlerat mund të kodohen në unicode. Hapësira e kodit u zgjerua më pas në mbi një milion karaktere. Kjo rezultoi në disa paraqitje unicode.

Përfaqësimet më të njohura të unicode janë dy: UTF-8 - e përdorur në internet dhe UTF-16 - e përdorur në Windows (Windows XP, Windows Vista, Windows 7).

Në kontekstin e krijimit të lojërave, nuk ka rëndësi se si të gjithë personazhet janë të koduar në paraqitjet e ndryshme të Unicode. Por gjëja e rëndësishme është se në të gjitha paraqitjet, numrat arabë janë të koduar në të njëjtën mënyrë si në ASCII.

Ekzistojnë dy versione të UTF-16: UTF-16LE (pak-endian) - kodimi me rend i kundërt bytes dhe UTF-16BE (big-endian) - kodim i madh endian. Në Windows, natyrisht, përdoret UTF16-LE.

Kodi i karakterit Unicode përcaktohet si më poshtë: U + hhhh (katër shifra heksadecimal, h nga heksadecimal). Për shembull, U + 221A është simboli rrenja katrore - √.

Disa nga karakteret në UTF-16 janë të koduara në dy bajt (63 mijë të parët). Pjesa tjetër e personazheve janë të koduar me çifte zëvendësuese. Meqenëse kjo nuk është shumë e rëndësishme për krijimin e lojërave, nuk do të ndalem në çifte zëvendësuese në detaje.

Në UTF-8, 128 karakteret e para janë të koduara në një bajt. Pjesa tjetër e karaktereve mund të kodohen me disa bajt (nga dy në katër).

Dhe një pikë tjetër (më e rëndësishmja): të gjitha simbolet e të gjithë skripteve moderne dhe shumë të vdekur janë të koduara në unicode, plus shenjat nga zona të ndryshme shkenca dhe kultura (simbolet matematikore dhe ekonomike, shënimi muzikor dhe shumë më tepër). Është për këtë arsye që ju duhet të përdorni unicode.

Edhe një herë, e përsëris që njohja e standardit Unicode dhe veçoritë e përfaqësimeve të ndryshme të tij nuk ndihmojnë shumë në një temë të tillë si krijimi i lojërave, kështu që do të duhet të vazhdoni vetë njohjen tuaj të mëtejshme me Unicode. Si zakonisht, standardi do të ofrojë ndihmë të paçmuar në këtë çështje.

Kodimi i tekstit në Microsoft Windows(Windows XP, Windows Vista, Windows 7)

Në moderne versionet e Windows ka dy mënyra për të përfaqësuar tekstin: UTF-16 dhe faqet e kodit (kryesisht kodime me tetë bit). Mënyra kryesore është unicode. Faqet e kodit janë të nevojshme për pajtueshmërinë me aplikacionet e vjetra (në Windows 95, Windows 98 - ASCII u përdor kryesisht). Gjithashtu, unicode nuk e kupton shumë një program i rëndësishëm- tastierë.

Mos u ngatërroni nga term i ri- faqja e kodit. Në Windows, të gjitha kodimet (bashke karakteresh ose kodime) quhen kështu. ato. koncepti i kodimit është i barabartë me një faqe kodi.

Menjëherë do të bëj një vërejtje që është më mirë të mbahet mend. Windows ka ndarje e qartë: këtu është unicode (UTF-16LE) dhe këtu janë të gjitha kodimet e tjera. Si unicode ashtu edhe kodimet e tjera në Windows quhen faqe kodesh, por unë do ta zbatoj këtë term (kodefaqe) për të gjitha kodimet përveç unicode.

Kur shkruanim programet e konsolës, teksti është nxjerrë duke përdorur faqen e kodit të Windows-1252. Kjo është arsyeja pse na u desh të telefononim setlocale (ai ndryshon faqen e kodit në Windows-1251):

Ky funksion ndryshon lokalitetin.

Lokal - lokalitet

Windows ka një gjë të tillë si Locale. Këtu nuk po e përdor fare saktë letrën gjurmuese të kësaj fjale - lokalitet, por, për mendimin tim, është mjaft e madhe për të akomoduar të gjithë kuptimin e konceptit Locale. Lokal përkthehet në karakteristika lokale. ato. këto janë disa parametra të përdorur në këtë vend të veçantë (rajon, shtet). setlocale ndryshon këto veçori:

setlocale (LC_CTYPE, "rusisht");

Në këtë sfidë, lokaliteti ndryshon në rusisht. Prandaj, Windows mund të përdorë specifikat tona lokale: paraqitjen e datës dhe orës, sistemin e matjes, monedhën dhe sigurisht faqen e kodit.

Parametri i parë i këtij funksioni tregon se cilat kategori karakteristikat lokale mund të ndryshojë. Mund të ndryshoni vetëm faqen e kodit (LC_CTYPE), mund të ndryshoni formatin e datës dhe orës (LC_TIME), ose mund të ndryshoni të gjitha kategoritë (LC_ALL, të gjitha - të gjitha).

Kthehu te kodimet.

Vetëm një faqe kodi mund të përdoret në të njëjtën kohë, ndërsa Unicode mund të përdoret gjithashtu me karakteret e faqes së kodit në program, pasi Unicode qëndron i ndarë nga të gjitha faqet e tjera të kodit. Mundohuni të përdorni gjithmonë unicode në programet tuaja. Ka kuptim vetëm përdorimi i faqeve të kodit në tastierë.

Artikujt kryesorë të lidhur